我很好奇 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 文件中进行非整数初始化。
我还考虑过将常量移动到它们自己的头文件中,并将它们包装在一个名称空间中,以防其他类需要常量,但不需要整个类定义。
只是想听听你的意见,或许还有其他我没考虑过的选择。