C++拷贝构造函数返回值的问题

#include<iostream>usingnamespacestd;classY{public:Y(intv=0):m(v){cout<<"Yconstruct"<<... #include <iostream>
using namespace std;
class Y{
public:
Y(int v=0):m(v){cout<<"Y construct " << endl;}
Y(const Y& obj):m(obj.m){cout<<"Y copy construct" << endl;}
Y get(){
return *this;
}
private:
int m;
};

Y f(Y obj)
{
cout << " return right now" << endl;
return obj;
};

Y g(){
Y obj;
return obj;
}

int main()
{
Y a;
b = f(a);
Y d = g();
}

为什么最后调用g()函数没有调用拷贝构造函数只是调用了一下Y的构造函数,函数f和g返回一个调用拷贝构造函数一个不调用,为什么?
展开
 我来答
西瓜霜润滑液
2013-12-08
知道答主
回答量:16
采纳率:0%
帮助的人:13.6万
展开全部
g里面是一个局部变量,当然没有拷贝,而f在传参数的时候拷贝了一次。不过一般类都是用引用。这种代码好教科书,实际运用根本不可能出现。
Y f(Y& obj)
{
cout << " return right now" << endl;
return obj;
};
这样就没有拷贝调用了
更多追问追答
追问
我的意思是拷贝构造函数是在return的时候调用的,就像 f 函数会调用两次拷贝构造,在传参的时候调用一次,在return的时候调用一次,但是为什么 g 函数在return的时候不调用拷贝构造函数呢?
追答
Y construct
Y copy construct
return right now
Y copy construct
g........
Y construct
Y copy construct
请按任意键继续. . .

上面是我运行的结果。有调用
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式