That a default constructor is synthesized for every class that does not define one
That the compiler-synthesized default constructor provides explicit default initializers for each data member declared within the class
As you have seen, neither of these is true.
2. This apparent anomaly between initialization order and order within the initialization list can lead to the following nasty pitfall
>> cat B.CPP
#include <iostream>
using namespace std;
class B
{
public:
int i;
int j;
B(int v):j(v),i(j){}
};
int main()
{
B b(3);
cout << b.i << endl;
}
运行结果:
>> ./a.out
-4197020
本文澄清了C++新手常犯的两个误解:默认构造函数的合成及初始化方式,并通过一个实例展示了成员变量初始化顺序的问题,可能导致的陷阱。
2万+

被折叠的 条评论
为什么被折叠?



