C ++整数类型:某些值的特殊含义

时间:2011-04-06 19:37:07

标签: c++ types

我们在有充分理由的情况下警告代码中的幻数,但是有一种良好的,富有表现力和类型安全的方法来巩固具有特殊含义的常量吗?我可以想到两种可能的方式:

方法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隐藏用户的值

3 个答案:

答案 0 :(得分:4)

Enum基本上只是给出数字名称。所以这应该可以正常工作。

答案 1 :(得分:4)

我不同意你在方法1中所做的事情。不需要NumberOfThreads类型。实际上这是一个常量,“线程数”,数字是整数。所以这在我看来已经足够且更具可读性。

const int NumberOfThreads = 0;

答案 2 :(得分:0)

此示例用法显示了在函数实现中隐藏的正确使用强制和魔术值。

int numberOfThreads;
/* ... */
numberOfThreads = automaticNumberOfThreads();
/* ... */
numberOfThreads = 1;
/* ... */
numberOfThreads = 16;
/* ... */
if (numberOfThreads == automaticNumberOfThreads())
{
    /* ... */