静态 constexpr 全局变量



在C++17中,像这样声明全局常量有什么区别吗:

namespace ns
{
static constexpr const auto global_variable = 47;
}

同时指定const修饰符,以及:

namespace ns
{
static constexpr auto global_variable = 47;
}

没有指定const?如果是,存在哪些差异,以及在哪些情况下建议使用哪个版本的声明?

没有区别,对象类型变量的constexpr说明符暗示const[dcl.constexpr]/9:

对象声明中使用的constexpr说明符将对象声明为const。[...]

请注意,这里的static也是多余的,因为 const 限定类型已经意味着内部链接 [basic.link]/3.2:

具有命名空间范围的名称具有内部链接,如果它是

  • [...]
  • 易失常量限定类型的非内联变量,既未明确声明extern,也没有先前声明具有外部链接 [...]
  • [...]

你不需要在这里有constconstexpr暗示const

相关内容

  • 没有找到相关文章

最新更新