中易网

为什么返回对象时创建的临时对象没有调用构造函数?求指点.....

答案:4  悬赏:40  
解决时间 2021-02-26 08:48
下面是我的一个测试程序
#include class A{public: int a; A(int m){a = m;cout<<"con"<运行后的结果是:

从运行结果上课,con是函数中临时变量调用的,而因返回对象而创建的临时对象并没用调用构造函数?为什么呢?求详细指点!!!!



最佳答案
你错了,不是没调用构造函数,你只能说是没调用你定义的那个普通构造函数!因为你返回的临时变量是根据你的fun函数里的局部变量a创建的,所以会调用拷贝构造函数,而不是普通构造函数,你在你的类A里加上这个定义:

A(const A& param)
{
cout<<"con"< }

那么就可以看到有两个con了,关于拷贝构造函数和普通构造函数网上一堆资料
全部回答
你返回又没有赋值 如果为A b=fun()才会被调用 因为执行了拷贝。你直接return 有没有给其它的对象,为什么会执行构造函数呢 即便调用,也应该调用的是拷贝构造函数或者operator=的构造函数,不是构造函数
return a; 这条语句调用拷贝构造函数构造一个临时变量,然后析够a,最后再把这个临时变量返回调用表达式那里。这个临时变量在语句fun();运行结束就自动析够了。所以运行结果是一次调用普通构造函数,两次调用析够函数。 对于这些代码产生的临时变量好的编译器就直接优化掉的。 如: A b = fun();这句代码编译器可以直接使用fun局部变量b构造a,不用产生临时变量。
如果你只是return一个0那就会有一个构造函数来生成返回的临时对象。 再看看别人怎么说的。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
北戴河钻石牌香烟6901028250382多少钱
我酒驾,不知道法院判我多久拘役
艾狮堡这个地址在什么地方,我要处理点事
尿蛋白108.尿b微球蛋白0.65,尿a1微球蛋白59.2
爰情保卫战2014年1022
索纳塔8为什么那么多2手车
都安瑶族自治县工商业联合会摩托车行业协会在
夜里在天上飞的不时闪出彩光的是什么飞机
水木年华1.67超薄近视眼镜片800-1000度多少钱
贵州茅台集团台醇众创电商我想知道这个在什么
韩国商店赫拉气垫BB双多少钱
fgo国服买石头号去哪里买好
3月到4月播什么花种子
自然资源审计与资源环境审计是什么关系
汽油报销时是取整数吗?比如发票上开的是203.4
推荐资讯
求穿越文陌上花已开的结局
算命中的坤宫是什么意思
海棠路/白桦路(路口)在哪里啊,我有事要去这
诚信有什么作用?何为诚信?
债务人的继承人以限定继承抗辩的债务由保证人
世保康净水器换滤芯口处滴水怎么办
哈尔滨哈锅锅炉工程技术公司怎么样
旭英家电维修在哪里啊,我有事要去这个地方
公司员工试用期已到,转正补交试用期保险怎么
当代商城南门这个地址在什么地方,我要处理点
北京东方华尔金融咨询有限责任公司南宁分公司
我身高1米5,体重90kg,练过2年散打,能否秒
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?