pass-by-reference-to-const 的好处:
- 避免拷贝构造函数的开销
- 避免 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,则上述问题不会存在
网友评论