关于C++的复制构造函数,下面这种情况会不会调用复制构造函数?

已定义classsample,另有一返回类型为sample的的函数samplefunc();sampleA;A=func();此处会不会调用几次复制构造函数?因为func... 已定义class sample,另有一返回类型为sample的的函数sample func();
sample A;
A=func();此处会不会调用几次复制构造函数?因为func是一个返回sample类的函数,在函数返回时会调用一次,我就是不太清楚给A赋值时会不会再调用一次赋值构造函数。
给A赋值时到底是按位复制 还是 调用复制构造函数?
展开
 我来答
adoqq_bd
2012-07-28 · TA获得超过7050个赞
知道大有可为答主
回答量:1818
采纳率:63%
帮助的人:1583万
展开全部
//函数返回sample时也不一定会调用复制构造函数,至于sample A;A=func(); 这里的A=func()调用的是operator= , 这样的sample A=func();才是调用复制构造,而实际还要看具体情况
#include <iostream>
using namespace std;
class sample
{
int n;
public:
sample(int nn=0){n=nn;}
sample(const sample& aa){ n=aa.n; cout<<"复制!!!\n"; }
sample& operator=(const sample& aa) { n=aa.n; cout<<"======\n"; return *this; }
};
sample func() //返回sample
{
return sample(7); //这样的会被优化掉,不调用复制构造函数,详细情顷耐况可以搜索“按返回值优化”这个词
}
sample func1() //返回sample
{
sample s1(7);
return s1;
}
int main()
{
sample s1=func(); //这个func()返回时不调用复制构造函数,并且构造s1时会优化,不调用复制构造
sample s2=func1(); //这个func1()调用复制构造函没竖数 ,并且构造s2时会优化,不调用复制构造
sample s3=s1; //这个s3会调用复制构函数
cout<<"****************************\n";
s3=func(); //这个func()返回时不调用复制构造函数
s3=func1(); //这个func1()返回时调用复制构枯乎大造函数
return 0;
}
追问
如果没有重载“=”,s3=func1()会调用几次赋值构造函数呢?
追答
还是一样的结果.这里的operator=仅仅是为了说明  sample s3=s1;这样的不调用operator=而是复制构造,sample s3,s3=s1这样的才是调用operator=,用operator=仅仅为了输出那行"=====",以此验证是否调用了operator=
匿名用户
2012-07-28
展开全部
不会,A在"渣伏sample A;"执行时已构和梁宏造,唤册A=func();就是同类型的对象赋值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pd...1@163.com
2012-07-28
知道答主
回答量:4
采纳率:0%
帮助的人:6229
展开全部
会构用复制构造函数,还有一种情况就是使用类做为参数进行传递的时候也会调用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
逆乱天地
2012-07-28 · TA获得超过127个赞
知道答主
回答量:173
采纳率:0%
帮助的人:92.8万
展开全部
这个是调用的重载赋值操作符的函数 也即 operator = (sample &)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-07-28
展开全部
不清楚。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式