【发布时间】:2011-01-03 20:23:42
【问题描述】:
我很好奇 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 文件中进行非积分初始化的不利之处。
我还考虑将常量移动到它们自己的头文件中,并将它们包装在命名空间中,以防其他类需要常量,而不是整个类定义。
只是寻找意见和其他可能我还没有考虑过的选项。
【问题讨论】:
标签: c++ constants declaration