传值与传引用(传址)的区别

本文探讨了C++中值传递和引用传递的差异。值传递涉及数据拷贝,消耗内存资源,而引用传递能提高效率但可能影响线程安全。使用const引用可以避免切断问题,但在内置类型和STL迭代器、函数对象中,传值更为合适。引用作为别名,其定义必须初始化,并在函数参数和返回值中应用,以直接操作实际对象,但不应返回临时变量的引用,以防对象生命周期问题。理解和恰当使用引用是掌握C++面向对象编程的关键。
摘要由CSDN通过智能技术生成
  • C++为了保持和c语言的兼容,一般的简单数据传递还是使用值传递,但对于大块的数据(数组、字符串、结构、类等),基本上是引用形式传递的。

  • 值传递的缺点:每次调用函数时,需要把数据拷贝一份,耗损内存资源。

  • 传引用的缺点:节省了内存和复制数据的时间,但安全性较差,难以保证线程安全。

  • 用传引用给const取代传值。典型情况下更高效而且可以避免切断问题(实现不了多态?

    • 这条规则不适用于内置类型和STL中的iterators 和函数对象,对于他们,传值更合适,因为作为惯例,它们就是为了传值而设计的,其实现有责任保证拷贝的高效并不受切断问题影响。
  • 关于引用

    • 引用变量
      int &x =i;
      意义:x是i的别名,是同一变量的两个名字,无论修改谁,变量都会发生改变。
      注意:引用在定义的时候一定要初始化。

    • 引用参数(传引用,传址)
      返回类型 函数名(参数类型& 参数名){函数体;}
      意义:C++默认是传值的,在函数体内修改形参并不会对实参产生影响,在函数运行之前先调用实参的拷贝构造函数生成一个临时变量,这个临时变量在函数体内代替形参参与运算,这也是为什么不用引用或指针就无法通过函数实现交换两个变量的值,这就是C++中调用拷贝构造函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值