很多时候,我都会纠结于一个编程语言特性的性能开销(即使这些节省下的性能远远赶不上我所花费更多的开发时间).最近在学习c++的时候,教程一再强调c++里面应该尽可能传引用而非传参,包括返回引用,在一些思考和调查之后,我认为传引用和传值的性能开销部分是值得有所探讨的
直接总结,在这几种情况下传值没必要用传引用来代替(也就是完全可以直接传值,性能上并不太会弱于传引用):
1.inline函数的参数可以直接用传值,返回也没必要用引用,开优化可以把临时变量优化掉
例如:
inline int f(const int &v)
{...}
跟
inline int f(const int v)
{...}
性能是没多大区别的(绝大部分编译器在优化情况下)
以及↓
inline int f(...){
int res;
...
return res;
}
其中变量res完全有可能被编译器优化掉,而没必要写成return by reference(返回引用)下面这种
inline int &f(...){
...
return xxx;//某个非local object
}
2.在所传的值size在指针size两倍以内的情况下没必要用引用(64:<16byte,32:<8byte)
class T{
double a,b;
...
};
T& f(T& v);
//T为16byte,并不大于64位指针8byte的两倍,这种情况下传引用并不比传值好太多
//特别是这种:
const