對象的初始化是說你在聲明的時候就調用默認的或者非默認的構造函數進行初始化工作,而賦值指的是你用一個已經存在的對象去給另一個已經存在的對象賦值。而你在聲明一個對象的時候就用另一個已經存在的對象對它初始化,這個不叫賦值,它調用的是COPY構造函數,還是構造函數。
其中對相間的賦值操作比初始化操作要慢,因為賦值操作會產生一個臨時性的中間對象,這個臨時性的中間對象會給被賦值對象賦值。聯想以前談C++傳參的機制是值傳遞這一點不難推斷出,這個對相間的賦值操作一定是調用了COPY賦值操作符這才導致了一個值傳遞的過程。
所以從程序效率的角度考慮盡量少采用對相間的賦值操作。
下圖所示的是一種新的初始化形式:
對于構造函數中只有一個形參的時候,你還可以如下形式進行初始化:
C++11標準還允許你使用{}進行初始化:
不過,在現在的VS上好像C++11還行不通。