浅谈C++函数返回

最近刚刚开始接触面向对象思想,学了类的基本知识。这两次做作业时,都在函数返回时遇到了一些有点confusing的问题。


首先,在一个要求有返回值(某个自定义类型class)的函数中,最后通常是一句return ...,这一句话别看短小,但他实际会调用你写的拷贝构造函数,至于是拷贝给谁,这里也是十分有讲究的。例如:

class A{

A(){...}

A(const A& second a){...}

~A(){...}


}


A f(){...

A a;

...

return a

}


int main(){

f();

A li=f();

}

大家看main函数里面这两个调用有什么不同呢??好像没什么不同,但是区别是很大的。第一个调用时,return a做了两件事,一个是将a通过拷贝构造函数,赋给了一个临时变量,这个临时变量对于我们是透明的,我们不妨就把这个临时变量看成f()这个整体函数外壳,第二件事是,调用析构函数释放a。但注意还没有完,我们说了f()是个临时变量,所以f();执行完之后立刻又调用析构函数释放f()所以说啊,你这里如果返回一个指针那么就会有问题。

那么下面第二个调用的区别是什么呢??最直白的解释是先将a赋给临时变量f(),然后将f()赋给li,但事实并非如此。大家注意,如果这里是先赋给临时变量的话,这个调用会和上面一样析构函数会调用两次,但事实只调用了第一次,第二次压根就没有赋给临时变量而是直接赋给了li,也就是如果可以省略中间临时变量的步骤就会省略掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值