【问题标题】:C++ Single value enums versus preprocessor directivesC++ 单值枚举与预处理器指令
【发布时间】:2014-01-15 15:03:57
【问题描述】:

关于最佳做法和性能的非常简单的问题。我知道直接在代码中使用裸常量是个坏主意(例如,-1 表示“未分配”)。如果可以的话,我通常不喜欢将预处理器用于此类事情,因为我不喜欢大喊大叫(例如#define UNASSIGNED -1)并且不喜欢打破将预处理器名称全部大写的约定。所以我开始使用匿名枚举:

enum {
  Unassigned = -1
};

问题:与预处理器方法相比,此方法是否存在运行时性能损失?这是个坏主意吗?

【问题讨论】:

  • 你考虑过静态const变量吗?我不是建议,只是质疑。
  • 同样,您是否考虑过如果您需要多个这样的常量,它们以某种方式属于一起,枚举类是一种可能的解决方案?

标签: c++ performance enums coding-style


【解决方案1】:

对运行时性能没有影响 - 编译器会知道它们只是两种情况下的值 -1

但是,我认为最好的方法是为此使用正确类型的常量。例如:

const int Unassigned = -1;

(当然,用您的实际类型替换 int)。

【讨论】:

  • 同意。既然你提到了它,在 C++11 中使用constexpr int Unassigned = -1; 可能会更好
【解决方案2】:

应该不会对性能产生影响。但是,为什么不只是const int Unassigned = -1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多