小数据类型如 int、float、pointer 直接传值比传递引用更快、更安全、代码更简洁,只有大对象如vector、Mat、结构体、string等才需要传递引用(const T&),下面介绍其核心原因
先看大小
float:4个字节
引用:本质上是指针,在64为系统中占用8个字节
结论:穿float比传递引用更快、更省空间
传值更快
cpu处理小数据时的做法(如int、float):
1. 直接放进寄存器
2. 0内存访问
3. 速度极快
如果传递引用:
1. cpu必须去内存读取指针
2. 解引用
3. 多一次间接访问,相比之下更慢
工业级规则
* 小于等于8字节的类型,一律传值
* 大于8字节的类型,一律传递 const &
最终工业级铁律
1. int/float/double/指针:直接传值,不需要 &,不需要 const &
2. vector/Mat/大结构体/string:必须传递 const &,禁止传值,会拷贝,慢,费内存