当 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 【问题描述】:up
和 up1
这里有什么区别?
为什么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?的主要内容,如果未能解决你的问题,请参考以下文章