我总是使用#define
在cpp文件开头的某个位置定义幻数。我想将其更改为const
个数字。 (在cpp文件中声明/定义的全局变量。)这是一个好主意吗?我应该将它们放入匿名名称空间吗?我从来没有#include
将cpp文件放在任何地方。
答案 0 :(得分:4)
基本上,选择这样的#define
“ consts”的唯一原因是预处理器本身是否需要使用它们。除此之外,与使用此类constexpr
相比,#define
具有一大堆优势-它们是listed here。
匿名命名空间仅在您要在同一文件中使用幻数时才是一个好的解决方案,因为其中的名称永远无法通过其他翻译访问就编译器而言,未命名的名称空间具有唯一的标识符,因此它们是单位。就是说,将幻数放在匿名命名空间中并没有真正的收获,因为任何const或constexpr
变量>命名空间范围 inherently have internal linkage。
至于const
和constexpr
之间的差异是在 objects 的上下文中得出的,要点是constexpr
表示在编译const
仅表示在编译期间可能未知的常量值。 1 此差异对于编译时编程或在其他constant expressions中的使用至关重要。
1 请注意,const
积分本身是用常量表达式(例如整数文字)初始化的)作为其声明的一部分,即使没有显式声明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
答案 1 :(得分:3)
这是个好主意吗?
是的,因为result
有几个问题,例如:
#define
我应该将它们放入匿名名称空间吗?
如果在文件范围内使用,是的,这很有意义。