[C++]论传值和传引用的性能开销

很多时候,我都会纠结于一个编程语言特性的性能开销(即使这些节省下的性能远远赶不上我所花费更多的开发时间).最近在学习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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值