对象的初始化是说你在声明的时候就调用默认的或者非默认的构造函数进行初始化工作,而赋值指的是你用一个已经存在的对象去给另一个已经存在的对象赋值。而你在声明一个对象的时候就用另一个已经存在的对象对它初始化,这个不叫赋值,它调用的是COPY构造函数,还是构造函数。
其中对相间的赋值操作比初始化操作要慢,因为赋值操作会产生一个临时性的中间对象,这个临时性的中间对象会给被赋值对象赋值。联想以前谈C++传参的机制是值传递这一点不难推断出,这个对相间的赋值操作一定是调用了COPY赋值操作符这才导致了一个值传递的过程。
所以从程序效率的角度考虑尽量少采用对相间的赋值操作。
下图所示的是一种新的初始化形式:
对于构造函数中只有一个形参的时候,你还可以如下形式进行初始化:
C++11标准还允许你使用{}进行初始化:
不过,在现在的VS上好像C++11还行不通。