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?如果是,有哪些差异以及在哪些场景下推荐使用哪种版本的声明?
没有区别,constexpr对象类型变量上的说明符意味着const [dcl.constexpr]/9:
\n\n\n对象声明中使用的说明符
\nconstexpr将对象声明为const。[\xe2\x80\xa6]
请注意,static这里也是多余的,因为 const 限定类型已经暗示了内部链接[basic.link]/3.2:
\n\n具有命名空间范围的名称具有内部链接,如果它是
\n\n\n
\n- [\xe2\x80\xa6]
\n- 非易失性 const 限定类型的非内联变量,既未显式声明
\nextern也未先前声明为具有外部链接 [\xe2\x80\xa6]- [\xe2\x80\xa6]
\n