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往往比较适当。

猜你喜欢

转载自blog.csdn.net/longmenshenhua/article/details/88796464
今日推荐