我希望能够为类提供一个默认名称,以便在记录错误时始终使用一个合理的名称。我不需要(或不希望(这个名称成为类本身的一部分。这个默认名称永远不会改变,因此是const
甚至constexpr
的一个很好的候选者,但无论出于什么原因,都不能使用constexpr QString
或constexpr 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这样的工具甚至会产生一个关于它是多余的警告(取决于使用的选项(,所以去掉它也可以减少工具的噪音。