在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
,也没有先前声明具有外部链接 [...]- [...]
你不需要在这里有const
,constexpr
暗示const
。