2.4 成员初始化列表

来源:互联网 发布:手机淘宝收藏不了店铺 编辑:程序博客网 时间:2024/06/09 21:44

Q1:必须在构造函数的初始化列表中进行初始化的四种情况:

1) 初始化一个引用成员时2) 初始化一个常量成员3) 调用基类的构造函数时4) 调用类成员的构造函数时

• 除了上述四种,程序可以正确编译并执行,不过效率将有可能降低。如下:

    class X        {            string _name;            int _cnt;        public:            X()            {                _name = "";                _cnt = 0;            }        };

在这种情况下,效率将远低于在初始化列表中直接调用_name成员的构造函数,编译器扩展后的结果:

class X    {        string _name;        int _cnt;    public:        X()        {            _name.string::string();                            //调用string 的默认构造函数            string temp = string("");                         //创建临时对象 temp            _name.string::operator=(temp);          //调用赋值操作符为_name成员赋值            temp.string::~string();                           //销毁临时对象            _cnt = 0;        }    };

Q2:构造函数初始化列表中成员的初始化顺序由类成员的声明顺序决定,与初始化列表中的排列顺序无关

• 初始化列表中的初始化操作在构造函数体内语句执行前结束
0 0