在C ++

时间:2019-07-12 18:03:29

标签: c++

假设您开始对项目进行编码,并且某些类型是整数,即您的代码可能看起来像这样:

typedef int NumericType;
NumericType a = 0;
NumericType b = 100;

将CountingType更改为特殊类,出于安全原因,该类没有从整数隐式转换。现在,您必须遍历所有代码并更新使用常量的位置。我已经开始遍历代码,将其更改为:

typedef specialType NumericType;
NumericType a = static_cast<NumericType>(0);
NumericType b = static_cast<NumericType>(100);

这样,如果将来再次更改NumericType,则需要更改的代码将更少。我开始怀疑这是否是我通常应该遵循的规则之一,因为我应该始终使用static_cast常量。

在C ++中使用格式字符串的任何时候,我就开始这样做,这样,如果我更改类型,我就有机会收到有关sprintf_s调用的警告。即

sprintf_s(buffer, 10, "Bob %d", static_cast<int>(bob));

还有另一种用于处理常量和键入内容的模式吗?

1 个答案:

答案 0 :(得分:1)

我与小组中的其他开发人员进行了交流,我喜欢的另一个解决方案是使用如下代码:

typedef int NumericType;
NumericType a = NumericType(0);
NumericType b = NumericType(100);

这样做的好处是,如果我为NumericType切换类型,则只需确保可以使用int构造它,这与允许将其转换为int有所不同。也就是说,只要specialType的构造函数采用intlong,那么此代码仅在typedef更新时有效。

typedef specialType NumericType;
NumericType a = NumericType(0);
NumericType b = NumericType(100);
相关问题