[英]Value initialization of POD struct is a constexpr?
考虑结构:
struct mystruct { };
这是否始终有效:
constexpr mystruct mystructInstance = mystruct();
即 POD 的值初始化是constexpr
吗? 同样,如果结构体定义为:
struct mystruct { ~mystruct(); };
最后,关于这个:
struct mystruct { mystruct(); ~mystruct(); };
我还没有将 ctr 声明为 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
不是LiteralType
因为它有一个重要的析构函数。 因此,以下内容无效且无法编译:
constexpr mystruct_2 mystructInstance_2 = mystruct_2();
这同样适用于mystruct_3
,另外它不是聚合并且不提供constexpr
构造函数。 因此以下内容也无效且无法编译:
constexpr mystruct_3 mystructInstance_3 = mystruct_3();
您还可以查看此在线演示中的描述性错误消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.