我总是使用 #define
在 cpp 文件开头的某处定义魔数(Magic Number)。我想将其更改为 const
数字。 (在 cpp 文件中声明/定义的全局变量。)这是个好主意吗?我应该将它们放入匿名命名空间吗?我从不在任何地方#include
cpp 文件。
最佳答案
基本上你选择这样的#define
“consts”的唯一原因是预处理器本身是否需要使用它们。除此之外,constexpr
比使用这样的 #define
有一大堆优势——它们是 listed here .
匿名命名空间 仅当您要在同一个文件中使用魔数(Magic Number) 时才是一个很好的解决方案,因为其中的名称永远无法从其他翻译中访问单位,因为就编译器而言,未命名的命名空间具有唯一的标识符。也就是说,将魔数(Magic Number)放在匿名命名空间中并没有真正的好处,无论是const
还是constexpr
任何命名空间范围 中的变量 inherently have internal linkage .
至于 const
和 constexpr
之间在 objects 上下文中的区别,要点是虽然 constexpr
表示在编译期间已知的常量值,const
仅表示在编译期间可能不知道的常量值。1 这种区别对于编译时编程至关重要,或用于其他 constant expressions .
1请注意,const
integral 本身是用常量表达式(例如 整数文字) 作为其声明的一部分隐含地是一个常量表达式,即使没有显式声明它 constexpr
:
const int A = 50; // `A` is a constant expression
int n = 50;
const int B = n; // `B` is not a constant expression as it-
// is not being initialized with a constant expression
关于C++ - 是否将 const 魔数(Magic Number)放入命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52427075/