本文共 806 字,大约阅读时间需要 2 分钟。
上代码
#includeusing namespace std;class A{ public: A(int v): j(v + 2), i(j) {} void print_val() { cout << "hello:" << i << " " << j << endl;} private: int i; int j;};int main(int argc ,char **argv){ A b(45); b.print_val();}
结果
究其因
类中成员变量的声明次序为先i后j,在初始化列表中初始化时,先j后i。但是程序执行时,初始化列表中初始化的顺序与声明的顺序一致(先i后j),而和自己的声明顺序无关。这样到时i用没有初始化的j初始化,导致错误!
解决途径
1. 严格按照成员变量声明的顺序初始化
2. 尽量用参数初始化,而不是成员变量之间的相互作用
#includeusing namespace std;class A{ public: A(int v): i(v), j(v + 2) {} void print_val() { cout << "hello:" << i << " " << j << endl;} private: int i; int j;};int main(int argc ,char **argv){ A b(45); b.print_val();}
结果
本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3477586.html,如需转载请自行联系原作者