匿名命名空间中的const与静态const



我希望能够为类提供一个默认名称,以便在记录错误时始终使用一个合理的名称。我不需要(或不希望(这个名称成为类本身的一部分。这个默认名称永远不会改变,因此是const甚至constexpr的一个很好的候选者,但无论出于什么原因,都不能使用constexpr QStringconstexpr std::string

在我的cpp文件中,做更好吗

namespace {
const QString NAME("Some Name");
}

namespace {
static const QString NAME("Some Name");
}

我知道这两个版本都会导致NAME具有内部链接,但最佳实践是什么?我看到过几次关于将全局变量移动到匿名命名空间的讨论,但都没有提到在命名空间中使用static

参考文献:

  • http://www.goldsborough.me/c/c++/链接器/2016/03/30/19-34-25-internal_and_external_linkage_in_c++/

  • 什么是外部联系和内部联系?

  • 未命名/匿名命名空间与静态函数

  • https://softwareengineering.stackexchange.com/questions/297059/static-globals-and-anonymous-namespaces-in-c

static在匿名命名空间中是完全冗余的。它什么都不做。

忽略它,因为它只会在上下文中添加噪音和额外的类型。像clang-time这样的工具甚至会产生一个关于它是多余的警告(取决于使用的选项(,所以去掉它也可以减少工具的噪音。

最新更新