And*_*ker 6 default-constructor value-initialization constexpr c++11
考虑结构:
struct mystruct { };
Run Code Online (Sandbox Code Playgroud)
这总是有效的:
constexpr mystruct mystructInstance = mystruct();
Run Code Online (Sandbox Code Playgroud)
即POD的值初始化是constexpr?类似地,如果结构被定义为:
struct mystruct { ~mystruct(); };
Run Code Online (Sandbox Code Playgroud)
最后,这个怎么样:
struct mystruct { mystruct(); ~mystruct(); };
Run Code Online (Sandbox Code Playgroud)
我没有宣布ctr为constexpr,但有没有任何隐含的扣除规则可以保证这一点吗?
constexpr变量必须满足以下要求:
- 它的类型必须是LiteralType.
- 它必须立即构建或赋值.
- 构造函数参数或要分配的值必须仅包含文字值,constexpr变量和函数.
- 用于构造对象(隐式或显式)的构造函数必须满足constexpr构造函数的要求.在显式构造函数的情况下,它必须指定constexpr.
鉴于你的3个结构:
struct mystruct_1 { };
struct mystruct_2 { ~mystruct_2(); };
struct mystruct_3 { mystruct_3(); ~mystruct_3(); };
Run Code Online (Sandbox Code Playgroud)
mystruct_1是一个LiteralType.所以以下是有效的并编译:
constexpr mystruct_1 mystructInstance_1 = mystruct_1();
Run Code Online (Sandbox Code Playgroud)
mystruct_2是不是一个LiteralType,因为它有一个不平凡的析构函数.因此以下内容无效且无法编译:
constexpr mystruct_2 mystructInstance_2 = mystruct_2();
Run Code Online (Sandbox Code Playgroud)
这同样适用mystruct_3,另外它不是聚合,也不提供constexpr构造函数.所以以下也是无效的,无法编译:
constexpr mystruct_3 mystructInstance_3 = mystruct_3();
Run Code Online (Sandbox Code Playgroud)
您还可以查看此在线演示中的描述性错误消息.
| 归档时间: |
|
| 查看次数: |
3354 次 |
| 最近记录: |