c++ - header 中的 private static const 成员变量与 cpp 中的 const 变量

标签 c++ static constants

为什么我应该在 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/

相关文章:

javascript - 什么是暂时死区?

c++ - 如何防止静态类成员变量需要两个定义/声明?

c++ - 在 const 函数问题中修改私有(private) int

c++ - 使用 Opencv 改变视角

c++ - X-Plane 以 3D 模式启动(插件 C/C++)

c++ - 如何使用指向不完整对象类型的智能指针安全地销毁类?

c++ - 派生类实例共享同一个基类实例

c - 静态变量的内存映射

c++ - C++ 对 static const 整数类型应用了哪些特殊规则?

java - 将 ArrayList 对象声明为 final 以在常量文件中使用