如果你有一个具有一些命名常量的类,那么存储常量的最佳实践是什么:
选项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中看到此方法存在任何问题?
答案 0 :(得分:3)
如果要让类的用户看到/使用字符串,则不会考虑将它们设为private
类成员。因此,我得出结论,他们并不打算被班级用户看到/使用。但是将它们放入标题根本没有意义。
如果将它们放入类(或命名空间范围内),那么对其类型和标识符的所有更改都将 强制客户端重新编译 其代码。
如果将 放入类的实现文件 ,它们是类实现的私有细节,对它们的更改只会强制重新编译类的实现。
如果您将它们放入 未命名的命名空间 ,它们就不会与任何其他名称冲突:
namespace {
namespace NamedConstants
{
const string Bucket = "Bucket";
}
}
答案 1 :(得分:1)
选项1可能会为包含标题的每个文件生成单独的字符串对象。所以它取决于你的资源是多么稀缺。