我们有充分的理由警告我们不要在代码中使用幻数,但是是否存在一种良好,可表达且类型安全的方法来固化具有特殊含义的常量?我可以想到两种可能的方式:
方法1:
typedef int NumberOfThreads;
const NumberOfThreads automaticNumberOfThreads = 0;
方法2:
class NumberOfThreads
{
NumberOfThreads(int n) : value(n) {}
static NumberOfThreads automatic() { return NumberOfThreads(0); }
bool isAutomatic() const { return value == automatic(); }
int value;
};
我并不是真的想要一个复杂的类型,但是我确实希望我的特殊价值与该类型紧密相关。在方法1中不是,懒用户可能只是硬编码分配或与
0
比较。方法2对于一些不超过整数值的东西似乎有点沉重。
问题可以扩展到非整数类型和多个特殊值。
enum
也许有可能实现某些目标?编辑:
我意识到我可以通过在头文件中使用
extern
向用户隐藏值 最佳答案
我不同意您在方法1中所做的事情。不需要NumberOfThreads类型。实际上,这是一个常数,“线程数”,而数字是整数。因此,我认为这已经足够而且更具可读性。
const int NumberOfThreads = 0;
关于c++ - C++整数类型:某些值的特殊含义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5572002/