C++类构造函数初始化列表执行顺序
2016-08-05 12:24
204 查看
说到C++类构造函数初始化列表执行顺序得先说说什么叫C++类构造函数初始化列表,直接上代码,以下代码就是C++类构造函数初始化列表。
以上代码中的类 A的构造函数中 n1与n2就叫C++类构造函数初始化列表,代码初始化了n1与n2
那么为什么会有C++类构造函数初始化列表执行顺序这个问题呢,原因是今天有好友在群(群号:125101150)里发了一面试题,说实在话,搞了很久C++的人都不一定会做这题(当然我也不会:))。下面来看看
这个面试题(图片太小,可以将图片另存为,再放大看)
![](http://img.blog.csdn.net/20160805122216893?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图片中代码片段
问题是执行Print后输出n1与n2值是多少.. 很多人会说,n2=0 n1=2 如果这样回答,那就是错的。初始化顺序不是从左向右的。
这时又会有人说,C++类构造函数初始化列表执行顺序是从右向左的,刚试了代码n1是随机数,n2是0.这样回答好像感觉挺对的,
我开始试的时候也认为是从右向左,但结果是错的,不信可以加一个n3去试.以下是n3的执行结果图
![](http://img.blog.csdn.net/20160805122341924?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
从图中可以看到如果从右向左执行的话n1是会等于n3的,但n1没有等于n3,所以执行顺序不是从右向左.
总结出来的结论是:对成员变量的初始化,是严格按照声明次序,而不是在初始化列表中的顺序进行初始化
大家一定要记住啊。
原文
http://www.panshy.com/articles/201608/dev-2750.html
http://c.panshy.com/thread-27-1-1.html
class A { private: int n1; int n2; public: A() :n1(0), n2(0) { }
以上代码中的类 A的构造函数中 n1与n2就叫C++类构造函数初始化列表,代码初始化了n1与n2
那么为什么会有C++类构造函数初始化列表执行顺序这个问题呢,原因是今天有好友在群(群号:125101150)里发了一面试题,说实在话,搞了很久C++的人都不一定会做这题(当然我也不会:))。下面来看看
这个面试题(图片太小,可以将图片另存为,再放大看)
图片中代码片段
class A { private: int n1; int n2; public: A() :n2(0), n1(n2+2) { } void Print() { std::cout << n1 << " " << n2; } };
问题是执行Print后输出n1与n2值是多少.. 很多人会说,n2=0 n1=2 如果这样回答,那就是错的。初始化顺序不是从左向右的。
这时又会有人说,C++类构造函数初始化列表执行顺序是从右向左的,刚试了代码n1是随机数,n2是0.这样回答好像感觉挺对的,
我开始试的时候也认为是从右向左,但结果是错的,不信可以加一个n3去试.以下是n3的执行结果图
从图中可以看到如果从右向左执行的话n1是会等于n3的,但n1没有等于n3,所以执行顺序不是从右向左.
总结出来的结论是:对成员变量的初始化,是严格按照声明次序,而不是在初始化列表中的顺序进行初始化
大家一定要记住啊。
原文
http://www.panshy.com/articles/201608/dev-2750.html
http://c.panshy.com/thread-27-1-1.html
相关文章推荐
- C++类构造函数初始化列表和初始化顺序
- 构造函数初始化列表执行顺序
- C++类的构造函数列表成员初始化的顺序问题
- C++类构造函数初始化列表顺序
- 类的成员变量 声明顺序 决定 初始化顺序(构造函数初始化列表不影响)
- C++类构造函数初始化列表
- java的初始化块、静态初始化块、构造函数的执行顺序及用途探究
- C++类构造函数初始化列表
- c++: C++类构造函数初始化列表详解
- 构造函数的初始化顺序 与 初始化列表。
- C++类构造函数初始化列表及初始化成员变量的误区
- C++类构造函数初始化列表
- Java的初始化块、静态初始化块、构造函数的执行顺序及用途
- C++类构造函数初始化列表
- C#类成员变量初始化与构造函数执行的顺序
- java变量,初始化快,构造函数的执行顺序,运算符的优先级(从高到低)
- C++类构造函数初始化列表
- C++成员变量初始化列表执行顺序
- 初始化列表的初始化变量顺序是根据成员变量的声明顺序来执行的
- C++类构造函数初始化列表