对于类的常量,我应该使用类范围static const,还是文件范围const?
例如:
// .h
class C {
private:
static const int some_constant_c;
}
// .cc
const C::some_constant_c = 10;
VS
// .h
class C {
}
// .cc
const some_constant_c = 10;
对我来说,前者具有更好的语义,即常量属于某个类,但后者具有不将常量暴露给头文件的优点。
==============
关于此的一个跟进问题:
如果我希望子类访问我的常量怎么办?将static const
放入protected
有意义吗?示例如下:
// .h
class C {
protected:
static const int some_constant_c;
}
答案 0 :(得分:4)
当然,这是个人偏好的问题。试图不在头文件中公开类内部是一个在C ++中最明确航行的船......在成员变量和私有成员函数之间,将实现细节保留在标题之外是不切实际的(除非你& #39;重新使用pImpl习语。
如果您只想隐藏常量的值,请注意您可以将初始化程序放在源文件中。
如果在源文件中将常量实现为全局变量,请使用匿名命名空间来防止它们导致链接器冲突。
答案 1 :(得分:2)
如果第一种情况中的const是私有的,我更喜欢第二种变体。
为什么要用冗余信息污染类声明? 考虑一下,您正在实现一个具有许多常量的协议解析器。课堂宣言如何?
另一个问题是,为什么要两次输入const的名称?我尽量保持定义和初始化。
只是一个意见。