【问题标题】: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) : x{x}, y{y}, z{z} {}
};

int main()
{
    // Error C2127'up': illegal initialization of 'constexpr'
    // entity with a non-constant expression
    constexpr vec3 up{0, 1, 0};

    const vec3 up1{0, 1, 0};
}

【问题讨论】:

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

标签: c++ c++11 constexpr


【解决方案1】:

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

constexpr vec3(int x, int y, int z) : x{x}, y{y}, z{z} {}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2011-06-03
    • 1970-01-01
    • 2016-12-15
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多