C++對傳參合傳返回值時構造的優化處理
C++形式參數類型和返回值類型如果是引用,那麼在傳遞時,會把實參或者返回值的引用自動 賦值給形式參數(返回值)。
C++返回值賦值和返回值的使用往往會進行編譯器的優化,例如:下面的調用中,只會調用兩次構造函數(一次是默認構造函數,另外一次是自動 拷貝構造函數)。
只有在一個表達式內纔會優化
Test1中調用了次AA的拷貝構造函數次AA的賦值運算符函數的重載。
Test2中調用了次AA的拷貝構造函數,次AA的賦值運算符函數的重載。
Test3中調用了次AA的拷貝構造函數,次AA的賦值運算符函數的重載。
class AA
{};
AA f(AA a)
{
return a;
}
void Test1()
{
AA a1;
a1 = f(a1);
}
void Test2()
{
AA a1;
AA a2 = f(a1);
}
void Test3()
{
AA a1;
AA a2 = f(f(a1));
}
Test1中調用了2次AA的拷貝構造函數1次AA的賦值運算符函數的重載。
Test2中調用了2次AA的拷貝構造函數,0次AA的賦值運算符函數的重載。
Test3中調用了3次AA的拷貝構造函數,0次AA的賦值運算符函數的重載。