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

问题描述 投票:7回答:1

考虑结构:

struct mystruct { };

这是否始终有效:

constexpr mystruct mystructInstance = mystruct();

即POD的值初始化为constexpr?类似地,该结构是否定义为:

struct mystruct { ~mystruct(); };

最后,这怎么样:

struct mystruct { mystruct(); ~mystruct(); };

我还没有将ctr声明为constexpr,但是有任何隐式演绎规则可以保证这一点吗?

c++11 constexpr default-constructor value-initialization
1个回答
6
投票

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

LiteralTypenot a constexpr mystruct_1 mystructInstance_1 = mystruct_1(); ,因为它具有非平凡的析构函数。因此,以下内容无效且无法编译:

mystruct_2

LiteralType同样适用,此外,它不是constexpr mystruct_2 mystructInstance_2 = mystruct_2(); ,并且不提供mystruct_3构造函数。因此以下内容也是无效的并且无法编译:

aggregate

您还可以查看此constexpr中的描述性错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.