当 const 有效时,为啥我不能声明 constexpr local?

Posted

技术标签:

【中文标题】当 const 有效时,为啥我不能声明 constexpr local?【英文标题】:Why can't I declare a constexpr local, when a const one works?当 const 有效时,为什么我不能声明 constexpr local? 【发布时间】:2018-08-09 10:38:59 【问题描述】:

upup1 这里有什么区别?

为什么const 有效,而constexpr 无效?

class vec3 
    int x, y, z;
public:
    vec3(int x, int y, int z) : xx, yy, zz 
;

int main()

    // Error C2127'up': illegal initialization of 'constexpr'
    // entity with a non-constant expression
    constexpr vec3 up0, 1, 0;

    const vec3 up10, 1, 0;

【问题讨论】:

很难从裁剪不佳的图像中分辨出来。 vec3 是什么? const vs constexpr on variables的可能重复 请以文本形式提供minimal reproducible example,并附上复制粘贴的编译器错误消息。您要显示的是不是来自编译器的错误消息。 引用 g++:“'vec3' 不是聚合,没有普通的默认构造函数,也没有不是复制或移动构造函数的 constexpr 构造函数” 你的类在 Dtor 前面需要 constexpr 【参考方案1】:

如果要创建constexpr对象,那么对应的构造函数也需要为constexpr。所以,构造函数需要是这样的:

constexpr vec3(int x, int y, int z) : xx, yy, zz 

(如果constexpr对象的初始化涉及调用函数,那么函数也需要是constexpr。构造函数也不例外。)

【讨论】:

以上是关于当 const 有效时,为啥我不能声明 constexpr local?的主要内容,如果未能解决你的问题,请参考以下文章

不能在 const 声明中使用 if 语句,但三元运算符有效[重复]

为啥 const 方法不能返回非常量引用?

var / let / const

const命令

类的const成员

C语言中用const声明全局变量赋初值和不赋初值有何区别?变量存放位置有啥不一样?