给定代码:
struct Test { int a = 1; int b = 2; }; Test test1; Test test2{};
对于test2,我确定,test2.a == 1和test2.b == 2.对于test1(没有{}),它是否保证(或不相同)?
解决方法
这条线
Test test1;
等效于使用默认构造函数的初始化,在没有手写的具有显式初始化列表且没有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)…