Effective C++ 条款20_宁以 pass-by-reference-to-const 替换 pass-by-value_不止于此

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

缺省情况下 C++ 以 by value 方式(一个继承自 C 的方式)传递对象至(或来自)函数。
但以值传递会由对象的 copy 构造函数产出,这可能使得 pass-by-value 成为昂贵的(费时的)操作。
那么我们有什么方法可以避免那些不必要的行为呢?那就是用 pass-by-reference-to-const 替换 pass-by-value。

class Student{...};
bool isValid(Student s);		// pass-by-value   费时
bool isValid(const Student& s);	// pass-by-reference-to-const  快且可避免切割问题

切割问题:
就是说如果传递一个 derived class 的对象,也许只有 base class 的属性被拷贝了,也就导致了不明确行为。但以 pass-by-reference-to-const 传递就不会出现这种问题,因为不会去调用 copy 构造函数。

如果窥视 C++ 编译器的底层,你会发现,references 往往以指针实现出来,因此 pass-by-reference 通常意味着传递的是指针。
请记住:

  • 尽量以 pass-by-reference-to-const 替换 pass-by-value。前者通常比较高效,可以避免切割问题。
  • 以上规则并不适用于内置类型,以及 STL 的迭代器和函数对象。对它们而言,pass-by-value 往往比较适当。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值