在《Effective C++》里提到对内置(C-like)类型在函数传参时pass by value比pass by reference更高效,当用OO的c++自定义类型(存在构造/析构等)pass by reference to const 更好,STL里的迭代器和函数对象是用C指针实现的,因此pass by value更好。至于为什么,下面的代码验证了下。
|
用VS 2012 默认Debug配置下生成的汇编代码如下:
4: int f(int i) |
后面的几个函数,只截取了关键代码了。
10: int g(const int &i) |
16: int h(int * p) |
指针跟上面引用一样。
22: int inter(int * &p) |
从汇编代码可以看出,为啥内置类型作为函数参数传递时更高效。