C++中为提升效率以常量引用传递基础数据类型是否值得?
C++中为提升效率以常量引用传递基础数据类型是否值得?
嘿,这个问题我刚摸C++的时候也纠结过,刚好能给你唠明白~
首先得先理清为啥大对象要传const引用:比如那些装着超大vector的自定义对象,拷贝它们的成本太高了——得把整个vector的元素都复制一遍,既耗时又占内存。而传const引用本质是传对象的内存地址,只需要拷贝几个字节的指针大小,还能保证不会意外修改原对象,效率优势特别明显。
但轮到基础数据类型(int、char、double这些)的时候,情况就完全反过来了!
你想啊,基础类型本身的大小就很小:比如int通常是4字节,char是1字节,double是8字节。而引用在底层其实是用指针实现的,64位系统下指针是8字节——这意味着传const int&的话,你其实是在传递一个8字节的指针,反而比直接传4字节的int值开销更大。
而且更关键的是,传值的时候编译器能做超多优化:它可以直接把这个基础类型的值放到CPU寄存器里,函数调用时直接用寄存器里的值就行,连内存访问都省了。但传引用的话,函数内部需要通过指针去内存里找对应的值,多了一次间接访问,反而拖慢了速度。
举个例子,对比void boo(const int &x);和void boo(int x);,后者的效率肯定更高,完全没必要用前者。甚至有些时候,传const引用还会导致编译器没法做某些优化,反而让性能更差。
所以结论很明确:给基础数据类型传const引用完全是画蛇添足,不仅不会提升效率,反而可能降低性能,直接传值就好~
备注:内容来源于stack exchange,提问作者Ahmed Asaleh
相关产品推荐
相关产品推荐

