条款22:尽量使用pass-by-reference(传址),少用pass-by-value(传值)

1,对象的by value传递,实际上就是copy constructor.
例如:
Student returnStudent(Student s) { return s; }
Student plato;                      // Plato studied under Socrates
returnStudent(plato);               // call returnStudent
首先调用copy constructor将s初始化,然后copy constructor再次被调用,初始化返回值.
然后destructor s,还要destructor返回值.
这个什么也没做的函数,耗费的成本:两个copy constructor,两个destructor.
而且:Student内部的数据成员,也要继续...

2,
const Student& returnStudent(const Student& s)
{ return s; }
没有任何constructor或destructor被调用,效率大大提高.

3,by reference的另外一个优点,可以避免"切割".
by value方式下,当一个Derived传递个一个Base对象,所有Derived的特征将被切割,内部只剩下base class对象.
显然reference多态性,可以避免这种情况.

4,注意一个残酷的事实:
reference的底层,几乎都是以指针完成,所以传递一个小对象,如:char,by value可能比by reference更有效.

你可能感兴趣的:(reference)