您的位置:首页 > 编程语言 > C语言/C++

C++类构造函数初始化列表执行顺序

2016-08-05 12:24 204 查看
说到C++类构造函数初始化列表执行顺序得先说说什么叫C++类构造函数初始化列表,直接上代码,以下代码就是C++类构造函数初始化列表。

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语言 class C++