返回信息流最近看到这样一段程序,有些疑问,希望有人帮忙解答一下。
现象:类定义私有部分, 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;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #86005同步于 2015/3/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教一个类的构造函数问题
lqb0635
2015/3/16镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
初始化顺序是按照成员变量的声明顺序,跟初始化列表里面的顺序无关,哪个声明在前,哪个先初始化
http://www.cnblogs.com/huhuuu/p/3484875.html
明白了,THX!!
【 在 xiaobing307 的大作中提到: 】
: 初始化顺序是按照成员变量的声明顺序,跟初始化列表里面的顺序无关,哪个声明在前,哪个先初始化
: http://www.cnblogs.com/huhuuu/p/3484875.html
嗯。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
感谢分享,不过这内容量有点大啊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
【 在 lqb0635 的大作中提到: 】
: 感谢分享,不过这内容量有点大啊1···吓到了
遇到争论一个语言的具体行为的细节的时候,specificatin难道不是最好的文档吗?
这倒是个不错的选择,受教了
【 在 nuanyangyang (暖羊羊) 的大作中提到: 】
: 遇到争论一个语言的具体行为的细节的时候,specificatin难道不是最好的文档吗?
通过『我邮2.0』发布