Effective C++条款20:宁以pass-by-reference-to-const替换pass-by-value(Prefer pass-by-reference-to-const to pass-by-value)
《Effective C++》是一本轻薄短小的高密度的“专家经验积累”。本系列就是对Effective C++进行通读:
条款20:宁以pass-by-reference-to-const替换pass-by-value
1、值传递影响效率的原因
缺省情况下,C++以传值的方式向函数传入或者从函数传出对象。除非你另外指定,否则函数参数都会以实际参数值的复件(副本)为初值,这些副本都是由对象的拷贝构造函数产出。这使得按值传递(pass-by-value)变成一项昂贵的操作。
值传递为什么会造成代码执行效率低?因为传值调用的时候,是传递对象的一个副本,因此是调用对象的拷贝构造函数将对象复制一份,然后传递给函数。效率比较低。
举个例子,考虑下面的类继承体系:有一个基类(Person)与一个派生类(Student),并且定义一个函数(validateStudent),参数接受一个Student对象(传值调用)
class Person {
public:
Person();
virtual ~Person();
private:
std::string name;
std::string address;
};
class Student :public Person {
public:
Student();
~Student();
private:
std