我很好奇在C++中不同的常量声明和定义选项有哪些好处/坏处。最长一段时间里,我一直是在类定义之前在头文件的顶部声明它们:
//.h
const int MyConst = 10;
const string MyStrConst = "String";
class MyClass {
...
};
虽然这样会污染全局命名空间(我知道这是不好的事情,但从未找到过一个详细的理由列表说明为什么这是不好的),但是这些常量仍将作用于各自的翻译单元,所以没有包含此头文件的文件将无法访问这些常量。但是如果其他类定义了相同名称的常量,可能会产生名称冲突,这有可能是一个好的指示需要进行重构的领域。
最近,我决定更好的做法是在类定义中声明特定于类的常量:
//.h
class MyClass {
public:
static const int MyConst = 10;
...
private:
static const string MyStrConst;
...
};
//.cpp
const string MyClass::MyStrConst = "String";
常量的可见性将取决于常量是仅在类内部使用,还是需要供使用该类的其他对象使用。目前我认为这是最好的选择,主要是因为您可以将内部类常量保持为类私有,任何使用公共常量的其他类都将具有更详细的常量源引用(例如MyClass :: MyConst)。它也不会污染全局命名空间。尽管它需要在cpp文件中进行非整数初始化,但这也是它的缺点。我还考虑过将常量移动到它们自己的头文件中,并在其中添加一个命名空间,以防其他类需要这些常量,但不需要整个类定义。
只是寻求意见和可能尚未考虑的其他选项。