14.3.2 在初始化表达式表中的内建类型

构造函数的初始化表达式表允许我们显式地调用成员对象的构造函数。事实上,也没有其他方法可以调用那些构造函数。它的主要思想是,在进入新类的构造函数体之前调用所有其他的构造函数。这样,对子对象的成员函数所做的任何调用都总是转到了这个被初始化的对象中。即使编译器可以隐藏地调用默认的构造函数,但在没有对所有的成员对象和基类对象的构造函数进行调用之前,就没有办法进入该构造函数体。这是C++的一个强化的机制,它确保了,如果没有调用对象(或对象的一部分)的构造函数,就别想向下进行。

所有的成员对象在构造函数的左括号之前就被初始化了,这种方法对于程序设计很有帮助。一旦遇到左括号,就认为所有的子对象已被正确地初始化了,我们的精力就可以集中在想要完成的任务上面。然而,还有一个问题:对于那些没有构造函数的内建类型嵌入对象,这一切又将怎样呢?

为了使语法一致,可以把内建类型看做这样一种类型,它只有一个取单个参数的构造函数,而这个参数与正在初始化的变量的类型相同。于是,可以这样写:

14.3.2 在初始化表达式表中的内建类型 - 图1

这些“伪构造函数调用”操作可以进行简单的赋值。这种方法很方便,并且具有良好的编码风格,所以常能看到它使用。

甚至当在类之外创建内建类型的变量时,也可以使用伪构造函数语法:

14.3.2 在初始化表达式表中的内建类型 - 图2

这使得内建类型的操作有点类似于对象。但要记住,这些并不是真正的构造函数。特别地,如果没有显式的进行伪构造函数调用,初始化是不会执行的。