c++ - 类作用域常量 : const vs static const

标签 c++

对于类的常量,我应该使用类作用域静态常量,还是文件作用域常量?

例如:

// .h
class C {
  private:
    static const int some_constant_c;
}

// .cc
const C::some_constant_c = 10;

对比

// .h
class C {
}

// .cc
const some_constant_c = 10;

对我来说,前者有更好的语义含义,即常量属于某个类,但后者的优点是不将常量暴露给头文件。

==============

关于此的一个后续问题:

如果我想让子类访问我的常量怎么办。将 static const 放在 protected 中有意义吗?示例如下:

// .h
class C {
  protected:
    static const int some_constant_c;
}

最佳答案

当然,这是个人喜好问题。尽量不在头文件中公开类内部结构是一艘在 C++ 中航行的船……在成员变量和私有(private)成员函数之间,将实现细节保留在头文件之外是不切实际的(除非您使用pImpl 习语)。

如果您只想隐藏常量的,请注意您可以将初始化程序放在源文件中。

如果您确实在源文件中将常量实现为全局变量,请使用匿名命名空间来防止它们引起链接器冲突。

关于c++ - 类作用域常量 : const vs static const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29684398/

相关文章:

Android/C++数据序列化

c++ - 无法使用 std::unique_ptr 初始化指针

c++ - 元组如何自动排序?

c++ - 如何使用 C++ 将字符串文件 txt 解析为数组

c++ - 使用 vector<>::iterator 时查找索引

c++ - 超出索引 C/C++

c++ - 为客户端-服务器通信构建 TCP/IP 服务器的最佳方式?

C++ 字符串 : [] vs. *

c++ - 如何在模板结构中使用包装的 typedef 修复 C++ 编译

c++ - 错误 : passing ‘constas ‘this’ argument discards qualifiers [-fpermissive]