討論構造拷貝構造的N中調用情況的問題

C++對傳參合傳返回值時構造的優化處理

  1. C++形式參數類型和返回值類型如果是引用,那麼在傳遞時,會把實參或者返回值的引用自動 賦值給形式參數(返回值)。

  2. 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的賦值運算符函數的重載。
Test1
Test3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章