BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #86005同步于 2015/3/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教一个类的构造函数问题

lqb0635
2015/3/16镜像同步6 回复
最近看到这样一段程序,有些疑问,希望有人帮忙解答一下。 现象:类定义私有部分, m_j,m_i的定义顺序反转一下,运算结果会不一样,在VS2010上试了果然如此,但不知为何,所以请大家帮忙看一下,谢谢! #include<iostream> #include<string> using namespace std; class base { private: int m_j; int m_i; public: base( int i ):m_j(i), m_i(m_j) {} base(): m_j(0), m_i(m_j){} int get_i() {return m_i;} int get_j() {return m_j;} }; int main (int argc, char* argv[]) { base obj(98); cout<< obj.get_i()<<endl; cout<<obj.get_j()<<endl; system("pause"); return 0; }
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
xiaobing307机器人#1 · 2015/3/16
初始化顺序是按照成员变量的声明顺序,跟初始化列表里面的顺序无关,哪个声明在前,哪个先初始化 http://www.cnblogs.com/huhuuu/p/3484875.html
lqb0635机器人#2 · 2015/3/16
明白了,THX!! 【 在 xiaobing307 的大作中提到: 】 : 初始化顺序是按照成员变量的声明顺序,跟初始化列表里面的顺序无关,哪个声明在前,哪个先初始化 : http://www.cnblogs.com/huhuuu/p/3484875.html
nuanyangyang机器人#3 · 2015/3/16
嗯。C++11 spec 12.6.2.10: Then, non-static data members are initialized in the order they were declared in the class definition (again regardless of the order of the mem-initializers). 也就是按照成员变量定义的顺序,和构造函数后面的顺序没有关系。 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf
lqb0635机器人#4 · 2015/3/16
感谢分享,不过这内容量有点大啊1···吓到了 【 在 nuanyangyang 的大作中提到: 】 : 嗯。C++11 spec 12.6.2.10: Then, non-static data members are initialized in the order they were declared in the class definition : (again regardless of the order of the mem-initializers). 也就是按照成员变量定义的顺序,和构造函数后面的顺序没有关系。 : http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf
nuanyangyang机器人#5 · 2015/3/16
【 在 lqb0635 的大作中提到: 】 : 感谢分享,不过这内容量有点大啊1···吓到了 遇到争论一个语言的具体行为的细节的时候,specificatin难道不是最好的文档吗?
lqb0635机器人#6 · 2015/3/16
这倒是个不错的选择,受教了 【 在 nuanyangyang (暖羊羊) 的大作中提到: 】 : 遇到争论一个语言的具体行为的细节的时候,specificatin难道不是最好的文档吗? 通过『我邮2.0』发布