在C ++中存储类特定命名常量的位置

时间:2010-07-21 13:34:13

标签: c++ class namespaces constants

如果你有一个具有一些命名常量的类,那么存储常量的最佳实践是什么:

选项1:类标题中的命名空间

所以在我的班级标题中我会:

class myClass
{
...
...
};

namespace NamedConstants
{
   const string Bucket = "Bucket";
}

选项2成员常量

class MyClass {      // this goes in the class
private:                          // header file
  static const string Bucket;
  ...
};

...并在类实现文件中:

const string MyClass::Bucket = "Bucket";

我实际上更喜欢选项1,认为它更清晰:变量名称和值一起出现。此外,如果您给命名空间一个好名字,那么当您使用常量时,它可以使代码更具可读性:

TrafficLight::Green

是否有人在选项2中看到此方法存在任何问题?

2 个答案:

答案 0 :(得分:3)

如果要让类的用户看到/使用字符串,则不会考虑将它们设为private类成员。因此,我得出结论,他们并不打算被班级用户看到/使用。但是将它们放入标题根本没有意义。

如果将它们放入类(或命名空间范围内),那么对其类型和标识符的所有更改都将 强制客户端重新编译 其代码。

如果将 放入类的实现文件 ,它们是类实现的私有细节,对它们的更改只会强制重新编译类的实现。
如果您将它们放入 未命名的命名空间 ,它们就不会与任何其他名称冲突:

namespace  {
  namespace NamedConstants
  {
     const string Bucket = "Bucket";
  }
}

答案 1 :(得分:1)

选项1可能会为包含标题的每个文件生成单独的字符串对象。所以它取决于你的资源是多么稀缺。