有这么一道题,求输出
class CTestClass
{
public:
CTestClass():c(3),b(c),a(b){}
int a;
int b;
int c;
}
int main()
{
CTestClass a;
std::cout << a.a << "," << a.b << "," << a.c << std::endl;
return 1;
}
今天居然在这道题上模糊了。正确答案: 0, 0,3或者前两个是未定义的数值,第三个是3。
为什么呢?
C++类中数据成员的构造与初始化列表中成员的顺序无关。与类数据成员在类中定义的顺序有关。所以在初始化类对象a时,调用a的构造函数,要先构造a,在构造b,最后是c。依据编译器的不同,a,b,c可能会先被默认初始化为0,如果此时构造CTestClass类对象a,则先用b初始化a,所以a.a为0,再用c初始化b,a.b也为0,最后用3初始化c,a.c为3,