考虑结构:
struct mystruct { };
这是否始终有效:
constexpr mystruct mystructInstance = mystruct();
即POD的值初始化为constexpr
?类似地,该结构是否定义为:
struct mystruct { ~mystruct(); };
最后,这怎么样:
struct mystruct { mystruct(); ~mystruct(); };
我还没有将ctr声明为constexpr,但是有任何隐式演绎规则可以保证这一点吗?
requirements for constexpr
variables是:
constexpr变量必须满足以下要求:
- 其类型必须为LiteralType。
- 必须立即构造或分配一个值。
- 构造函数参数或要分配的值必须仅包含文字值,constexpr变量和函数。
- 用于构造对象(隐式或显式)的构造函数必须满足constexpr构造函数的要求。对于显式构造函数,必须指定constexpr。
给出您的3个结构:
constexpr
struct mystruct_1 { };
struct mystruct_2 { ~mystruct_2(); };
struct mystruct_3 { mystruct_3(); ~mystruct_3(); };
是mystruct_1
。因此,以下内容有效并可以编译:
LiteralType
LiteralType
是not a constexpr mystruct_1 mystructInstance_1 = mystruct_1();
,因为它具有非平凡的析构函数。因此,以下内容无效且无法编译:
mystruct_2
LiteralType
同样适用,此外,它不是constexpr mystruct_2 mystructInstance_2 = mystruct_2();
,并且不提供mystruct_3
构造函数。因此以下内容也是无效的并且无法编译:
aggregate
您还可以查看此constexpr
中的描述性错误消息。