C++ POD结构的值初始化是constexpr?
考虑结构:C++ POD结构的值初始化是constexpr?,c++,c++11,constexpr,default-constructor,value-initialization,C++,C++11,Constexpr,Default Constructor,Value Initialization,考虑结构: struct mystruct { }; 这是否始终有效: constexpr mystruct mystructInstance = mystruct(); i、 e.POD的值初始化是一个constexpr?类似地,如果结构定义为: struct mystruct { ~mystruct(); }; 最后,关于这个: struct mystruct { mystruct(); ~mystruct(); }; 我没有将ctr声明为constexpr,但是是否有任何隐式演绎规
struct mystruct { };
这是否始终有效:
constexpr mystruct mystructInstance = mystruct();
i、 e.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
。因此,以下内容是有效的:
constexpr mystruct_1 mystructInstance_1 = mystruct_1();
mystruct_2
是不是LiteralType
,因为它有一个非平凡的析构函数。
因此,以下内容无效且无法编译:
constexpr mystruct_2 mystructInstance_2 = mystruct_2();
constexpr mystruct_3 mystructInstance_3 = mystruct_3();
这同样适用于
mystruct_3
,此外,它不是并且不提供constexpr
构造函数。
因此,以下内容也无效且无法编译:
constexpr mystruct_2 mystructInstance_2 = mystruct_2();
constexpr mystruct_3 mystructInstance_3 = mystruct_3();
您还可以查看其中的描述性错误消息。太好了,谢谢。在我提交bug之前,我基本上是想确保MSVC的行为是不正确的。我很高兴看到constexpr最终在VS 2015中实现,但它仍然不能正常工作。上述案例1在VS中失败,即使在2015年[叹气]+1的链接以及。这是一个很棒的工具。与一起使用非常有用。LiteralType的页面已移至