C++中的函数三种参数传递问题: 传值,传址(*),传引用(&) 怎么使用传引用

  • 写在前面:

    函数接收的参数 都可以理解为是实参的副本,不论是传值,传址,传引用,传进去的都是一个副本而非实参本身

  • 传值:复制一个实参的值,作为副本传入函数(栈空间中),函数操作该副本,将不会改变实参本身

  • 传址:复制一个实参的地址(即指针),作为副本传入函数(栈空间中),函数操作该副本,将改变该指针指向的内存中的实参的数据

  • 传引用:复制一个实参的指针常量,以一个参数的别名,作为副本传入函数(栈空间中),函数操作该别名,将改变与该别名共享内存地址的实参的数据

  • 传引用:本质是传址,操作是传值传引用可以想象成 可以影响实参的传值
    引用本质是指针常量,相当于是外部变量的别名,该别名和实参拥有相同的内存地址。
    实际操作的就是实参,即在函数内对该变量进行修改的话,在外部该变量也会相应被修改。

  • 写在后面:

    ||关于拷贝构造函数:
    对于拷贝构造函数而言,类对象通常需要较多的存储空间,如果按值传递,必然会较大消耗“栈”空间, 也需要较多的时间实施复制过程。
    当函数参数传入一个类对象时,如果参数是类对象,就是值传递,就要复制,复制就要调拷贝构造函数。这就形成了拷贝构造函数再调拷贝构造函数,无限递归下去。因此只能用引用的方法。

    所以构造函数的参数应该是, ClassName(const ClassName &obj)
    //因为拷贝构造函数不会修改参数的内容,也不会修改参数的属性,故使用常量引用传递。

    || 关于参数需要对象的函数:
    当函数参数要传入类对象时,都必须传入一个对象的别名进行操作。因为创造一个副本时,隐藏使用了一个拷贝构造函数

发布了24 篇原创文章 · 获赞 40 · 访问量 3945

猜你喜欢

转载自blog.csdn.net/a13352912632/article/details/104194783