有以下两段C++代码。第一段为:
#include<iostream>
#include<cstdlib>
using namespace std;
class Pair{
public:
Pair(int a, int b): ma(a), mb(ma+b) {}
int ma;
int mb;
};
int main(){
Pair p(1,2);
cout << p.ma << " " << p.mb << endl;
system("pause");
return 0;
}
运行结果为:
1 3
第二段代码为:
#include<iostream>
#include<cstdlib>
using namespace std;
class Pair{
public:
Pair(int a, int b): ma(a), mb(ma+b) {}
int mb;
int ma;
};
int main(){
Pair p(1,2);
cout << p.ma << " " << p.mb << endl;
system("pause");
return 0;
}
运行结果为:
1 -858993458
两段代码,仅仅是成员变量 ma、mb 的定义顺序不同(第8行、9行不同),为什么运行结果就不一样呢?
百思不得姐!!希望大神指点一二,谢谢。
请注意使用所谓的初始化器的规则
它们不是按照初始化器的位置来决定谁先初始化
而是根据变量谁在前来决定谁先初始化。
第二段代码由于mb在前,所以mb会被先初始化。
详细内容应该C++ Primer 5ed上面有的,个人的建议是不要使用互相引用来初始化