对于类的常量,我应该使用类作用域静态常量,还是文件作用域常量?
例如:
// .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/