繁体   English   中英

POD结构的值初始化是constexpr吗?

[英]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变量要求是:

constexpr 变量必须满足以下要求:

  • 它的类型必须是 LiteralType。
  • 它必须立即构造或分配一个值。
  • 构造函数参数或要分配的值必须仅包含文字值、constexpr 变量和函数。
  • 用于构造对象的构造函数(隐式或显式)必须满足 constexpr 构造函数的要求。 在显式构造函数的情况下,它必须指定 constexpr。

鉴于您的 3 个结构:

struct mystruct_1 { };
struct mystruct_2 { ~mystruct_2(); };
struct mystruct_3 { mystruct_3(); ~mystruct_3(); };

mystruct_1LiteralType 所以以下是有效的并编译:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM