首页 > 解决方案 > 我应该更喜欢类或命名空间范围内的静态 const 变量吗?

问题描述

一个比另一个有什么切实的好处吗?我开始使用后者是因为它不会用静态 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; }  
    ...
}

标签: c++

解决方案


首先,

const wstring kFoo(L"foo");

在全局范围内,而不是在namespace. 您可以轻松地将其包装在一个匿名的namespace.

namespace
{
   const wstring kFoo(L"foo");
}

static对于使用类成员还是 a 中的成员是否更好的问题namespace,答案取决于团队编码风格指南以及个人偏好。

我的建议是将它放在namespace.cpp 文件中的匿名下。这样,它可以保留实现细节,并且类定义不会被实现细节污染。

附言

请注意,类中的静态字符串常量与常量 [c++] 的命名空间中的问题解决了该问题,但有所不同。在另一篇文章中,用户希望static在多个文件之间共享成员变量。在您的帖子中,您已明确将static成员变量作为private成员,因此不会跨文件共享。如果该评估不正确,则您的问题与另一个问题重复,因此应该关闭。


推荐阅读