C++构造函数
相信许多小伙伴一定使用C++中的构造函数。但是最近在看深度探索C++对象模型的时候发现了一个重要的坑点,就是使用初始化列表初始构造函数时是按照类内成员声明顺序构造的。
如已下代码:
#include<iostream>
class A{
public:
int first = 0;
int second = 0;
A(int x):second(x),first(second){};
};
int main(){
A a(4);
std::cout << a.first << " " << a.second;
//输出为 4202574 4
}
A(int x):second(x),first(second){};
这个构造函数并非是按先赋值second再赋值first进行的,而是按类内成员声明顺序进行赋值的。所以最后输出了一个奇怪的数字。不过好在现在编译器比较智能了,这个问题在g++上会提示相应的警告。