• 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类型的,都不要返回一个指向函数中局部变量的指针。这个指针本身可能在函数的调用方是可以访问的,但是这个指针所指的对象肯定是在函数结束后访问不到的。
  • 相关阅读:
    Linux内核分析第十八章读书笔记
    Linux内核分析作业 NO.5
    Linux内核分析第五章读书笔记
    Linux内核分析 一二章读书笔记
    Linux内核分析作业 NO.4
    Linux内核分析 NO.3
    Linux内核分析作业 NO.2
    Linux内核分析作业 NO.1
    论自我,论异类——《无声告白》
    愿随命运颠沛流离——《孤儿列车》读后感
  • 原文地址:https://www.cnblogs.com/super119/p/1996103.html
Copyright © 2020-2023  润新知