变量上的"const constexpr"是多余的吗?

Is `const constexpr` on variables redundant?

本文关键字:quot 多余 constexpr 变量 const      更新时间:2023-10-16

cppreference指出:

对象声明中使用的 constexpr 说明符或非静态 成员函数(直到C++14(意味着常量。

"对象声明">

是指"任何变量声明"吗?

constexpr const int someConstant = 3;

相当于

constexpr int someConstant = 3;

在 C++11、C++14 和 C++17?

在带有基元的声明中,例如示例中的声明,const确实是多余的。但是,可能存在需要const的奇怪情况,例如

constexpr int someConstant = 3;
constexpr const int *someConstantPointerToConstant = &someConstant;

在这里,someConstantPointerToConstant既是一个constexpr(即它在编译时是已知的,因此constexpr(,它也是一个指向常量的指针(即它的对象不能被改变,因此const(。上面的第二个声明不会在省略const的情况下进行编译(演示(。

const

对于对象来说const constexpr是多余的。

"对象声明">

是指"任何变量声明"吗?

确实如此。

根据 cpp 首选项,变量或常量是一个对象:

变量是不是非静态数据的对象或引用 成员,即由声明引入。