【问题标题】:const vs static const in anonymous namespace匿名命名空间中的 const 与静态 const
【发布时间】:2019-10-30 17:12:44
【问题描述】:

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

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

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

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

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

参考资料:

【问题讨论】:

  • “但你不能做constexpr QStringconstexpr std::string无论出于什么原因”你不能new或在编译期间执行动态内存分配。这是 std::string 这样的类型没有 constexpr 构造函数的原因之一。你可以有一个constexpr char[] 的想法。

标签: c++ qt static linker


【解决方案1】:

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

将其排除在外,因为它只会在该上下文中添加噪音和额外的输入。 像 clang-tidy 这样的工具甚至会生成一个关于它是多余的警告(取决于使用的选项),因此将其排除在外也可以减少工具的噪音。

【讨论】:

    猜你喜欢
    • 2010-09-14
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多