C++中函数的参数是传值还是传址?return返回的变量是传值还是传址?

阅读了C++ Primer 4th第七章,有了明确的答案。

首先,函数的参数。

如果参数类型不是reference的,那么,函数的调用方压入的参数(我们称之为argument,函数本身的参数我们称为 parameter,两者区分来),会被copy一份,然后被赋予到parameter中。如果很不幸这个参数是个vector,那么,整个 vector,包括里面所有的元素,都会被copy一份,这就是参数拷贝。

如果参数类型是reference类型的,那么,就不会有上述的参数拷贝的过程。

很显然,如果有参数拷贝的动作,那么,在函数中对parameter的修改,不会影响到argument。如果没有参数拷贝,那么,对parameter的修改,就会直接影响argument

其次,函数的返回值。

也分为两种情况,如果函数的返回值不是reference类型的,那么,编译器会自动在return的时候,将return的变量copy到一个 临时对象中(temporary object),然后这个临时对象就能给函数的调用者使用。换句话说,如果我们return一个函数中定义的局部变量,这是没有问题的,因为这个变量会被 copy到临时对象中。即使这个局部变量本身会在函数结束的时候也随之消亡。

如果函数的返回值是reference类型的,那么,就没有临时对象这么一回事了。return的是什么就是什么。

所以,根据以上两点,有两个很重要的推论:

1. 如果函数的返回值是reference类型的,那么,不能返回函数中某个局部变量的reference,因为这个局部变量在函数结束的时候也消亡了。

2. 不管函数的返回值是不是reference类型的,都不要返回一个指向函数中局部变量的指针。这个指针本身可能在函数的调用方是可以访问的,但是这个指针所指的对象肯定是在函数结束后访问不到的。

原文链接: https://www.cnblogs.com/super119/archive/2011/03/26/1996103.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++中函数的参数是传值还是传址?return返回的变量是传值还是传址?

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/22856

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午12:51
下一篇 2023年2月8日 上午12:51

相关推荐