要点:优先使用const引用传递参数,而不是传值。
C++缺省的参数传递方式是传值。通过const引用传递参数要高效得多,因为它不再调用copy构造和析构函数。通过引用传递参数还可以解决切割(slicing)问题,当子类作为基类对象传递参数时,仅调用基类的copy构造函数,其子类部分被切割掉了。
对于内置的类型,传值更高效。传值同样适用于STL的迭代器和函数对象。
有人认为任何小的类型都适合传值,其实不然,因为小对象的copy构造函数开销也许非常昂贵,并且有的编译器对只有一个double的对象也不进行寄存器优化,而任何编译器对指针都是做寄存器优化的。另外一个理由是,用户自定义类型会随着修改而变大。
结论:优先使用const引用传参数,除了内置类型、STL迭代器和函数对象。