Effective C++ Term 20 以引用传递

pass-by-reference-to-const 的好处:

  1. 避免拷贝构造函数的开销
  2. 避免 slicing 问题,因为引用类似于指针,可以实现多态;下面例子中解释得很清楚
class Base;
class Derived: public Base;
void MyFunc(Base);

\\ ...

Derived derived;
MyFunc(derived);

这段代码对MyFunc的调用有一个 down-casting 的过程,由于参数类型要求的是base,所以传进去的derived会被 slice 为基类,其派生类部分的成员都会被剔除,并且多态也无法体现(调用的virtual函数,如果存在的话,都是基类的函数)

而如果是 pass-by-reference-to-const,则上述问题不会存在

你可能感兴趣的:(Effective C++ Term 20 以引用传递)