为什么要在标题中声明私有static const
变量(并在CPP中初始化),而不仅仅是在CPP中定义 将其声明?
即。
case1.h
class MyClass
{
...
private:
static const MyType some_constant;
}
case1.cpp
const MyType MyClass::some_constant = ...;
case2.h
//No mention of some_constant at all
case2.cpp
const MyType some_constant = ...;
假设遵循常见的C 约定(1个标题& cpp仅与1类关联,从不#include
.cpp文件),在这两种情况下,该变量都是私有的,两者都是在调用构造函数之前初始化的。两者都提供了作为"静态类局部常数"的功能。
上述两种方法之间是否有区别?(最好是哪一个)?
由于它是private
成员,只有类的实现才能访问它。
因此,出于不必要污染您的班级定义的利益,我倾向于采用第二种方法。
您可以更进一步,然后在匿名名称空间:
中定义它namespace {
const MyType some_constant = ...;
}
这样,它肯定本地化为单个翻译单元。但是请注意,您使用的const
意味着默认情况下内部链接。(没有const
,使用extern
的其他人可以访问该变量)