我们有充分的理由警告我们不要在代码中使用幻数,但是是否存在一种良好,可表达且类型安全的方法来固化具有特殊含义的常量?我可以想到两种可能的方式:

方法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/

10-11 02:56