静态 constexpr 全局变量

nya*_*108 3 c++ static constants global-variables constexpr

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

namespace ns
{
static constexpr const auto global_variable = 47;
}
Run Code Online (Sandbox Code Playgroud)

还指定const修饰符,并且:

namespace ns
{
static constexpr auto global_variable = 47;
}
Run Code Online (Sandbox Code Playgroud)

没有指定const?如果是,有哪些差异以及在哪些场景下推荐使用哪种版本的声明?

Mic*_*zel 7

没有区别,constexpr对象类型变量上的说明符意味着const [dcl.constexpr]/9

\n\n
\n

对象声明中使用的说明符constexpr将对象声明为const。[\xe2\x80\xa6]

\n
\n\n

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

\n\n
\n

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

\n\n
    \n
  • [\xe2\x80\xa6]
  • \n
  • 非易失性 const 限定类型的非内联变量,既未显式声明extern也未先前声明为具有外部链接 [\xe2\x80\xa6]
  • \n
  • [\xe2\x80\xa6]
  • \n
\n
\n