c – POD成员默认初始化没有大括号

前端之家收集整理的这篇文章主要介绍了c – POD成员默认初始化没有大括号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
给定代码
struct Test {
    int a = 1;
    int b = 2;
};

Test test1;
Test test2{};@H_404_3@ 
 

对于test2,我确定,test2.a == 1和test2.b == 2.对于test1(没有{}),它是否保证(或不相同)?

解决方法

这条线
Test test1;@H_404_3@ 
 

等效于使用默认构造函数的初始化,在没有手写的具有显式初始化列表且没有Test()= deleted的情况下;最终会将两个成员设置为指定的初始值1和2.

“默认构造函数”是可以不带参数调用的构造函数,这与上述语句完全相同.

您可以阅读standard中默认构造函数的规则 – 转到§12.1第4节:

A default constructor for a class X is a constructor of class X that can be called without an argument…

在第5节中进一步说明:

A default constructor that is defaulted and not defined as deleted is implicitly defined when it is odrused (3.2) to create an object of its class type (1.8)…

猜你在找的C&C++相关文章