为什么我要在头文件中声明一个私有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文件),在这两种情况下,该变量对于类是私有的,两者都在之前初始化构造函数被调用,它们都提供了一个"静态类本地常量"。
上述两种方法之间有什么区别吗? (哪一个更可取)?
答案 0 :(得分:3)
由于它是private
成员,因此只有该类的实现才能访问它。
因此,为了不会不必要地污染你的班级定义,我倾向于采用第二种方法。
您可以更进一步,在匿名命名空间中定义它:
namespace {
const MyType some_constant = ...;
}
以这种方式,它肯定是本地化为单个翻译单元。但请注意,默认情况下,您使用const
隐含internal linkage。 (如果没有const
,其他人可以使用extern
)