使用const int &var
形式参数代替const int var
可以获得什么?
我知道大型结构的优势但是对于POD,指针的大小通常与实际数据相同。所以我猜答案是“没有优势”。但我想也许传值值语义一次复制到堆栈并再次复制到堆栈区域以便于参考(比如寄存器)。或者可能不是。事实上,传递价值可能更好,
http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/
因为引用通常由C ++使用指针实现,并且取消引用指针比直接访问它更慢,访问通过引用传递的值比访问值传递的值要慢。
但这又回到了我所说的关于从堆栈中复制的说法。我只是偏执狂吗?这种行为是让编译器担心而不是我。
我可以单步执行我知道的程序集,但是,谷歌搜索速度更快,而且空白了。
答案 0 :(得分:3)
考虑一下:
<强>非参考强>
<强>参考强>
使用参考版本的速度稍慢。但一般来说,让编译器担心它。如果它是一个只读值,只需给它一个常规的旧int。如果需要修改调用者的值,请使用引用或指针。
当然,只有像int这样的小数据类型才有效。如果你正在谈论像结构或其他更大的东西,那么使用引用可能会更快。
答案 1 :(得分:1)
传递引用时,复制引用的值,都是相同的。当你使用它时,你会间接浪费几个周期,但除此之外没有性能差异。
当然,如果你抛弃constness,或者你在另一个线程上更改引用值,程序行为可能会有所不同。