标题中的私有静态const成员变量和cpp

时间:2017-10-05 07:16:18

标签: c++ static 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文件),在这两种情况下,该变量对于类是私有的,两者都在之前初始化构造函数被调用,它们都提供了一个"静态类本地常量"。

的功能

上述两种方法之间有什么区别吗? (哪一个更可取)?

1 个答案:

答案 0 :(得分:3)

由于它是private成员,因此只有该类的实现才能访问它。

因此,为了不会不必要地污染你的班级定义,我倾向于采用第二种方法。

您可以更进一步,在匿名命名空间中定义它:

namespace {
    const MyType some_constant = ...;
}

以这种方式,它肯定是本地化为单个翻译单元。但请注意,默认情况下,您使用const隐含internal linkage。 (如果没有const,其他人可以使用extern

访问该变量