请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

函数以值的方式返回对象时, vs2022怎么没有调用拷贝构造函数了呢

函数以值的方式返回对象时, vs2022怎么没有调用拷贝构造函数了呢
图片描述

正在回答 回答被采纳积分+3

2回答

lucasj 2024-07-17 12:17:45

https://img1.sycdn.imooc.com/szimg/669745c4086bbd2511010580.jpg地址是一样的,VS2022也做了优化了

0 回复 有任何疑惑可以回复我~
长歌_吴从周 2023-12-19 15:16:16

编译器做了优化。你可以把g和gg的地址显示出来,应该是同一个值。

0 回复 有任何疑惑可以回复我~
  • lucasj #1
    #include <iostream>
    using namespace std;
    
    class CGirl
    {
    public:
        string m_name;
        int m_age;
    
        CGirl() { m_name.clear(); m_age = 0;  cout << "调用了CGirl()构造函数。\n"; }
    
        CGirl(const CGirl& gg) { m_name = "漂亮的" + gg.m_name; m_age = gg.m_age - 1;  cout << "调用了CGirl(const CGirl &gg)拷贝构造函数。\n"; }
        CGirl(const CGirl& gg, int ii) { m_name = "漂亮的" + gg.m_name; m_age = gg.m_age - ii;  cout << "调用了CGirl(const CGirl &gg,int ii)拷贝构造函数。\n"; }
        
        ~CGirl() { cout << "调用了~CGirl()\n"; }
    
        void show() { cout << "姓名:" << m_name << ",年龄:" << m_age << endl; }
    };
    
    CGirl func() {
        CGirl gg;
        gg.m_name = "西瓜";
        gg.m_age = 2;
        cout << "gg的地址是:" << &gg << endl;
        return gg;
    }
    
    int main()
    {
        CGirl g1;
        g1.m_name = "西施"; g1.m_age = 23;
        CGirl g2(g1, 3);
        g2.show();
        cout << endl;
    
        CGirl ggg = func();
        ggg.show();
        cout << "ggg的地址是:" << &ggg << endl;
    }
    
    
    这样试了一下,gg和ggg的地址确实是一样的
    回复 有任何疑惑可以回复我~ 2024-07-17 12:15:27
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号