CPP中的私有静态常规成员变量与const变量



为什么要在标题中声明私有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的其他人可以访问该变量)

最新更新