一个人比另一个人有明显的好处吗?我开始使用后者,因为它不会用静态const声明污染头文件,因此它读起来有点容易。我经常在几个成员函数中使用这些常量。
课程范围:
.hpp
class MyType
{
private:
static const std::wstring kFoo;
}
.cpp
const wstring MyType::kFoo(L"foo");
...
void MyType::parse(const wstring& input)
{
if (input == kFoo) { do1; }
...
}
相对
命名空间范围
.cpp
const wstring kFoo(L"foo");
...
void MyType::parse(const wstring& input)
{
if (input == kFoo) { do1; }
...
}
答案 0 :(得分:1)
首先
const wstring kFoo(L"foo");
在全局范围内,而不在namespace
中。您可以轻松地将其包装在匿名namespace
中。
namespace
{
const wstring kFoo(L"foo");
}
关于使用static
类成员还是namespace
中成员的问题,答案取决于团队编码风格准则以及个人喜好。
我的建议是将其放在.cpp文件中的匿名namespace
下。这样,它可以保留实现细节,并且类定义不会受到实现细节的污染。
PS
请注意,问题static string constants in class vs namespace for constants [c++]使问题更严重,但有所不同。在另一篇文章中,用户希望在多个文件之间共享static
成员变量。在您的帖子中,您明确地将static
成员变量作为private
成员,因此不能在文件之间共享。如果该评估是不正确的,则您的问题是另一个问题的重复,应被视为同样的解决方案。