对变量的要求constexpr
是:
constexpr 变量必须满足以下要求:
- 它的类型必须是 LiteralType。
- 它必须立即构造或赋值。
- 构造函数参数或要分配的值必须仅包含文字值、constexpr 变量和函数。
- 用于构造对象的构造函数(隐式或显式)必须满足 constexpr 构造函数的要求。在显式构造函数的情况下,它必须指定 constexpr。
鉴于您的 3 个结构:
struct mystruct_1 { };
struct mystruct_2 { ~mystruct_2(); };
struct mystruct_3 { mystruct_3(); ~mystruct_3(); };
mystruct_1
是一个LiteralType
。所以以下是有效的并编译:
constexpr mystruct_1 mystructInstance_1 = mystruct_1();
mystruct_2
不是a因为LiteralType
它有一个重要的析构函数。因此以下内容无效且无法编译:
constexpr mystruct_2 mystructInstance_2 = mystruct_2();
这同样适用于mystruct_3
,此外它不是聚合并且不提供constexpr
构造函数。所以以下也是无效的,无法编译:
constexpr mystruct_3 mystructInstance_3 = mystruct_3();
您还可以查看此在线演示中的描述性错误消息。