被委派的构造函数的初始化列表执行阶段

来源:互联网 发布:下载蜜蜂软件 编辑:程序博客网 时间:2024/05/20 05:27

c++中,构造函数初始化列表中的值用于初始化类内成员,而构造函数函数体需要在所有类内成员初始化完成后执行。那么调用委托构造函数,其被委托构造函数的初始化列表是否用于类内成员初始化呢?


首先查阅了 ISO/IEC C++11  标准文档,其中规定:


12.6.1 Explicit initialization      [class.expl.init]

6. Once the target constructor returns, the body of the delegating constructor is executed.


此条说明了执行顺序,但是没有回答我的问题。在标准文档找了很久,也找不到相关解答,只能写个程序看看了。


用下面代码测试:

#include<iostream>using std::cout;using std::endl;class class_a{public:class_a(int x):a(x),b(x){}class_a():class_a(999){}int  show_b(){return b;}private:int a;const int b;};int main(){class_a object_a;cout<<"\n"<<object_a.show_b()<<endl; return 0;}

输出为999. 这样的话在此编译器下(g++ 5.3.0 -std=c++11 -Wall) 调用委托构造函数后,被委托构造函数的初始化列表的确用于类内成员初始化.

//TODO 以后学的更加深入我在回头看这个问题


0 0
原创粉丝点击