【摘要】:动手写8.3.4初始化列表看似与在函数体中赋值的形式等价,其实却不然。运行结果如图8.3.3所示:图8.3.3初始化列表的调用顺序由于A中包含了一个B的对象,在进入A构造函数的函数体之前,虽然并没有初始化列表,但系统还是会自动调用B的默认构造函数,因此结果中才会出现A构造函数被调用之前的那一句。动手写8.3.6动手写8.3.6展示了几种必须使用初始化列表的情况,分别是常量成员、引用成员和没有默认构造函数的类成员。
在上一小节中我们展示了一个构造函数的示例,那个构造函数与普通的函数类似,类成员的初始化工作都在函数体中使用赋值进行。然而对于这一种特殊的构造函数来说,我们也可以使用初始化列表来初始化。
动手写8.3.3
动手写8.3.3展示了初始化列表的使用。初始化列表位于参数列表和函数体之间,以一个冒号“:”开始,并用逗号隔开数个类似调用构造函数的初始化表达式。其实在实际编程中,我们也可以使用类似的语法对基本数据类型的变量进行初始化。
动手写8.3.4
初始化列表看似与在函数体中赋值的形式等价,其实却不然。
动手写8.3.5
(www.xing528.com)
动手写8.3.5中展示了默认构造函数在初始化列表省略时也会被调用的情况。运行结果如图8.3.3所示:
图8.3.3 初始化列表的调用顺序
由于A中包含了一个B的对象,在进入A构造函数的函数体之前,虽然并没有初始化列表,但系统还是会自动调用B的默认构造函数,因此结果中才会出现A构造函数被调用之前的那一句。
鉴于系统潜在的这一行为,我们应该尽量使用初始化列表,这是因为如果在函数体中再赋值的话,会有调用默认构造函数、执行其中语句等一系列不必要的开销。
此外,还有一些必须使用初始化列表的情况。
动手写8.3.6
动手写8.3.6展示了几种必须使用初始化列表的情况,分别是常量成员、引用成员和没有默认构造函数的类成员。前两种情况很好理解,引用成员和常量成员的普通变量在声明的时候就需要初始化;而第三种情况是因为没有显式的默认构造函数可以调用,而用初始化列表在很多情况下都是显式调用拷贝构造函数(此内容会在下一章中介绍)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。