1、构造函数
初始化顺序:implicit base default constructor,implicit member object default constructor,memeber innitialization list(invoke by the declare order),explicit codes in the construtor's function body。
前面两项只有在必要的时候才存在。
2、拷贝构造函数
当某一对象作为另一个对象的初值、某一对象以传值的方式作为一个函数的参数或者函数的返回值为对象,那么拷贝构造函数将被调用。如果不存在用户自定义的拷贝构造函数,且不存在以下四种情况,那么编译器调用的拷贝构造函数将是以”位拷贝“(浅拷贝)的方式进行拷贝的。
(1)对象成员存在拷贝构造函数;
(2)基类存在拷贝构造函数;
(3)存在至少一个虚拟函数;
(4)以虚拟继承的方式从至少一个基类继承;
当以上四种情况出现时,且不存在用户自定义的拷贝构造函数时,编译器将产生一个隐式的拷贝构造函数。
NRV的核心作用是剔除拷贝构造函数的调用,从而提高效率。NRV(Named Return Value)优化激活条件:1、存在拷贝构造函数;2、return语句只能出现在最后一个语句。