Effective C++之条款20:宁以pass-by-reference-to-const替换pass-by-value

声明:

  1. 文中内容收集整理自《Effective C++(中文版)第三版》,版权归原书所有。
  2. 本内容在作者现有能力的基础上有所删减,另加入部分作者自己的理解,有纰漏之处敬请指正。

条款20:宁以pass-by-reference-to-const替换pass-by-value

Prefer pass-by-reference-to-const to pass-by-value.

函数pass-by-value参数都是以实际实参的拷贝为初值,这些拷贝是有对象的copy构造函数执行的,可能使得pass-by-value成为昂贵的费时操作。

通过pass-by-reference-to-const就可以回避所有的构造函数和析构动作了。

以pass-by-value方式传递参数可能导致slicing(对象切割)问题。当一个derived class对象以by-value方式传递给一个参数类型为base class对象,derived class对象会被视为 base class对象,而derived class的所有特化信息都会被切除。通过pass-by-reference方式可以解决slicing问题。

从C++编译器底层来看,references往往以指针实现出来,pass-by-reference通常意味着真正传递的是指针。

请记住:

  1. 尽量以pass-by-reference-to-const来代替pass-by-value,前者通常比较高效,并可以避免切割问题。
  2. 以上规则并不适用于内置类型以及STL迭代器和函数对象,对它们而言,pass-by-value往往比较适当。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值