我应该在类或名称空间范围使用静态const变量吗?

时间:2019-04-09 22:08:39

标签: c++

一个人比另一个人有明显的好处吗?我开始使用后者,因为它不会用静态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; }  
    ...
}

1 个答案:

答案 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成员,因此不能在文件之间共享。如果该评估是不正确的,则您的问题是另一个问题的重复,应被视为同样的解决方案。