【C++】拷贝构造函数中的形参是const引用类型的,为何需要引用且为const引用?

根本原因

在c++中,传值时就是形参是实参的一份拷贝,传引用时形参和实参是一个东西。

返回类型也一样,返回值则是拷贝一份返回,返回引用则返回同一个东西(注意不要返回局部对象的引用,函数退出时对应的空间已被释放)。

直接原因

由于(根本原因)形参是实参的一份拷贝,如果直接传递值给拷贝构造函数而不是传引用,那么形参对象会拷贝实参对象,这个拷贝过程又调用拷贝构造函数(第二次),在第二次调用拷贝构造函数时,形参对象继续拷贝实参对象,继续调用拷贝构造函数(第三次)…陷入死循环。

因此需要传引用给拷贝构造函数。

为何拷贝构造函数要用const引用?

在这里没有太复杂的原因,就是为了表明拷贝构造函数中没有对传递进来的对象做任何修改,也是防止拷贝构造函数对对象进行修改,更加严谨安全。实际上不加const也是可以照常运行的,就是不够严谨。养成习惯:不需要改变对象时,传引用时加上const。

为何要用const引用?

  1. 将传值换成传const引用可以避免产生临时变量,这样避免就可以减少很多不必要的时间和空间的开销;
  2. 对右值的引用如果不用右值引用(&&)就必须传递const引用,因为普通引用没法引用右值(字面值常量、临时量等),实际上,不使用常量引用会极大限制函数所能接受的实参类型,因为我们不能把const对象、字面值或者需要类型转换的对象传递给非常量引用;
  3. 如上所述,保证传递的实参没有被修改,同时也表明函数内不对实参进行修改(对指针的const引用除外,如果只有顶层const,对于指针形参进行const引用依然可以改变指针指向的内存地址存放的内容,可以参考这篇博客)。
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值