zoukankan      html  css  js  c++  java
  • 函数返回值是类对象时调用复制构造函数?

    调用复制构造函数的三种情况:

      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<< "
    ---------------
    ";
        x=fun2(y);
        cout<< "
    ---------------
    ";
        x=fun3(y);
        cout<<endl;
        return 0;
    }
    

      vc6.0下的结果:

       VS2013下的结果:

      CodeBlock下的结果:(据说是gcc编译器把函数返回对象给优化了)就像 return Complex(2, 4); 优化了

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

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

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    315,谁来保护手游开发者的利益
    微信小程序之提高应用速度小技巧
    Python-爬虫-Beautifulsoup解析
    Python-爬虫-requests
    Python-form表单标签
    设计模式のTemplatePattern(模板模式)----行为模式
    链接
    python入门007
    007作业
    005作业
  • 原文地址:https://www.cnblogs.com/htj10/p/10181509.html
Copyright © 2011-2022 走看看