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

时间:2018-05-30 16:37:14

标签: c++ constexpr equivalent

cppreference声明:

  

在对象声明或非静态中使用的constexpr说明符   成员函数(直到C ++ 14)暗示const。

“对象声明”是否意味着“任何变量声明”?

即。是

constexpr const int someConstant = 3;

相当于

constexpr int someConstant = 3;

在C ++ 11,C ++ 14和C ++ 17中?

2 个答案:

答案 0 :(得分:5)

在使用基元的声明中,例如示例中的基础,const确实是多余的。但是,可能会出现需要const的奇怪情况,例如

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

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

答案 1 :(得分:2)

constconst constexpr对象中是多余的。

  

“对象声明”是否意味着“任何变量声明”?

确实如此。

根据cppreference,变量或常量是一个对象:

  

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