C++对象模型(四):class成员初始化列表(Member Initialization List)
2013-12-09 20:10
309 查看
本文是Inside C++ Object Model Chapter 2 部分的读书笔记。
编译器如何处理初始化成员列表的。
下列情况中,必须要使用member initialization list进行data member 的初始化:
1) 当初始化一个reference member。
2) 当初始化一个const member。
3) 当调用一个base class 的constructor,而他拥有一组参数的时候。
4) 调用一个member class 的constructor ,而他有一组参数。
编译器会一一操作初始化列表的成员,以适当的顺序在class的constructor中插入初始化操作,并且保证它们都发生在任何explicit user code 之前。
这里总的需要留意两点:
第一个:member object的初始化,最好放到初始化列表里面。若放置于构造器中,则会产生临时的object0,初始化之,在做赋值运算给object,然后object0自行销毁,期间耗时耗力。若置于初始化列表,则编译器会在构造函数中,user code之前,调用object的构造函数,予以初始化。
第二个:初始化列表的初始化次序。初始化次序和member在类中的声明次序一致。相互关联的member,需要十分留意初始化列表中,其中依赖的次序。解决的办法:把其中一部分使用初始化列表初始化,而另一部分放置到构造函数中使用user code予以表达,这样即便次序存在依赖,也会只“先执行合成的,再执行user的code”。
总结:
编译器会对initialization list一一处理并且可能重新排序:按照members的声明顺序。它会安插一些代码到constructor内,并且在explicit user code之前
编译器如何处理初始化成员列表的。
下列情况中,必须要使用member initialization list进行data member 的初始化:
1) 当初始化一个reference member。
2) 当初始化一个const member。
3) 当调用一个base class 的constructor,而他拥有一组参数的时候。
4) 调用一个member class 的constructor ,而他有一组参数。
编译器会一一操作初始化列表的成员,以适当的顺序在class的constructor中插入初始化操作,并且保证它们都发生在任何explicit user code 之前。
这里总的需要留意两点:
第一个:member object的初始化,最好放到初始化列表里面。若放置于构造器中,则会产生临时的object0,初始化之,在做赋值运算给object,然后object0自行销毁,期间耗时耗力。若置于初始化列表,则编译器会在构造函数中,user code之前,调用object的构造函数,予以初始化。
第二个:初始化列表的初始化次序。初始化次序和member在类中的声明次序一致。相互关联的member,需要十分留意初始化列表中,其中依赖的次序。解决的办法:把其中一部分使用初始化列表初始化,而另一部分放置到构造函数中使用user code予以表达,这样即便次序存在依赖,也会只“先执行合成的,再执行user的code”。
总结:
编译器会对initialization list一一处理并且可能重新排序:按照members的声明顺序。它会安插一些代码到constructor内,并且在explicit user code之前
相关文章推荐
- C++对象模型(四):class成员初始化列表(Member Initialization List)
- [深度探索C++对象模型]关于成员初始化列表(member initiallization list)
- Inside the C++ Model第二讲之 成员初始化列表(Member Initialization List)
- C++初始化成员列表(member initialization list)
- 深入探索C++对象模型笔记之五 —— 构造函数语意学 (成员们的初始化队伍 Member Initialization List)
- C++对象模型——成员初始化列表(第二章)
- 类成员变量初始化列表(Member Initialization List)
- 类成员变量初始化列表(Member Initialization List)
- 关于c++的class(偏c++11以前,构造、静态成员、const、初始化列表、友元、内联、template)
- C++初始化列表问题,类中有一个对象类型的数组成员变量,在初始化列表中初始化时报错“[]”操作符语法错误
- C++对象模型的那些事儿之五:NRV优化和初始化列表
- 利用“member initialization list”初始化类成员
- C++对象模型的那些事儿之五:NRV优化和初始化列表
- 构造函数成员初始值列表(member initialization list)
- c++高级---C++类构造函数初始化列表以及对象成员的构造
- C++对象模型——Virtual Member Functions (虚拟成员函数)(第四章)
- c++:成员对象,基类初始化列表 接口与实现分离
- 【C++】深度探索C++对象模型之虚拟成员函数(virtual member function)
- 成员的初始化表即member Initialization list 。P74~81
- C++ Static Member Variable Initialization 静态成员变量初始化