为什么我应该在 header 中声明一个私有(private)的 static const
变量(并在 cpp 中初始化它)而不是仅仅在 cpp 中定义 + 声明它?
即
案例1.h
class MyClass
{
...
private:
static const MyType some_constant;
}
case1.cpp
const MyType MyClass::some_constant = ...;
案例2.h
//No mention of some_constant at all
案例2.cpp
const MyType some_constant = ...;
假设遵循常见的 c++ 约定(1 个 header 和 cpp 仅与 1 个类相关联,从不与 #include
.cpp 文件相关联),在这两种情况下,变量都是类私有(private)的,两者都是在调用构造函数之前初始化,都提供了作为“静态类局部常量”的功能。
以上两种做法有什么区别吗? (哪个更好)?
最佳答案
因为它是一个private
成员,所以只有类的实现才能访问它。
因此,为了避免不必要地污染您的类定义,我倾向于采用第二种方法。
您可以更进一步,在匿名命名空间中定义它:
namespace {
const MyType some_constant = ...;
}
那样的话,它肯定会本地化到一个翻译单元。但是请注意,您使用 const
意味着 internal linkage默认。 (如果没有 const
,其他人可以使用 extern
访问该变量)
关于c++ - header 中的 private static const 成员变量与 cpp 中的 const 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46579953/