函數返回值是類對象時調用復制構造函數?


調用復制構造函數的三種情況:

  1.當用類一個對象去初始化另一個對象時。

  2.如果函數形參是類對象。

  3.如果函數返回值是類對象,函數執行完成返回調用時。

#include <iostream>
using namespace std;
class Test{
public:
    Test(){ }
    //復制構造函數
    Test(const Test &t) {cout<< 1;}
};
//傳參是對象的引用,不調用復制構造函數。
//傳參是對象,調用復制構造函數。
Test fun1(Test &u)
{
    Test t=u; //初始化時用=號,就是Test t(u); 調用復制構造函數。而在賦值語句中的=號,不調用。像 Test x,y; x=y;
    return t; //返回值是對象,調用復制構造函數
}
Test& fun2(Test &u)
{
    Test t=u;
    return t; //返回值是對象的引用,不調用復制構造函數
}
Test fun3(Test u)
{
    Test t=u;
    return t; //返回值是對象,調用復制構造函數
}

int main()
{
    Test x,y;
    x=fun1(y);
    cout<< "\n---------------\n";
    x=fun2(y);
    cout<< "\n---------------\n";
    x=fun3(y);
    cout<<endl;
    return 0;
}

  vc6.0下的結果:

   VS2013下的結果:

  CodeBlock下的結果:(據說是gcc編譯器把函數返回對象給優化了)就像 return Complex(2, 4); 優化了

 ------------------------------------------------------------------------------------------------------------------

可以參考:https://blog.csdn.net/sxhelijian/article/details/50977946


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM