采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
函数以值的方式返回对象时, vs2022怎么没有调用拷贝构造函数了呢
地址是一样的,VS2022也做了优化了
编译器做了优化。你可以把g和gg的地址显示出来,应该是同一个值。
#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的地址确实是一样的
登录后可查看更多问答,登录/注册
只要选对课,掌握C++并不难,慕课“助学计划”成就每一个追梦人
801 5
858 5
585 4
501 4
537 4
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号