变量上的 `const constexpr` 是多余的吗?
Is `const constexpr` on variables redundant?
cppreference 表示:
A constexpr specifier used in an object declaration or non-static
member function (until C++14) implies const.
"object declaration" 是指 "any variable declaration" 吗?
即是
constexpr const int someConstant = 3;
相当于
constexpr int someConstant = 3;
在 C++11、C++14 和 C++17 中?
const
在 const constexpr
中对于对象来说是多余的。
Does "object declaration" mean "any variable declaration"?
确实如此。
根据cppreference,变量或常量是对象:
A variable is an object or a reference that is not a non-static data
member, that is introduced by a declaration.
在带有原语的声明中,例如您示例中的声明,const
确实是多余的。但是,可能存在需要 const
的奇怪情况,例如
constexpr int someConstant = 3;
constexpr const int *someConstantPointerToConstant = &someConstant;
这里,someConstantPointerToConstant
既是一个constexpr
(即它在编译时已知,因此constexpr
)也是一个指向常量的指针(即它的对象不能被改变,因此 const
)。上面的第二个声明在省略 const
时无法编译 (demo).
cppreference 表示:
A constexpr specifier used in an object declaration or non-static member function (until C++14) implies const.
"object declaration" 是指 "any variable declaration" 吗?
即是
constexpr const int someConstant = 3;
相当于
constexpr int someConstant = 3;
在 C++11、C++14 和 C++17 中?
const
在 const constexpr
中对于对象来说是多余的。
Does "object declaration" mean "any variable declaration"?
确实如此。
根据cppreference,变量或常量是对象:
A variable is an object or a reference that is not a non-static data member, that is introduced by a declaration.
在带有原语的声明中,例如您示例中的声明,const
确实是多余的。但是,可能存在需要 const
的奇怪情况,例如
constexpr int someConstant = 3;
constexpr const int *someConstantPointerToConstant = &someConstant;
这里,someConstantPointerToConstant
既是一个constexpr
(即它在编译时已知,因此constexpr
)也是一个指向常量的指针(即它的对象不能被改变,因此 const
)。上面的第二个声明在省略 const
时无法编译 (demo).