使用(const int& var)形式参数代替(const int var)可以获得什么?

时间:2011-08-24 22:37:18

标签: c++ parameters pass-by-reference

使用const int &var形式参数代替const int var可以获得什么?

我知道大型结构的优势但是对于POD,指针的大小通常与实际数据相同。所以我猜答案是“没有优势”。但我想也许传值值语义一次复制到堆栈并再次复制到堆栈区域以便于参考(比如寄存器)。或者可能不是。事实上,传递价值可能更好,

http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/

  

因为引用通常由C ++使用指针实现,并且取消引用指针比直接访问它更慢,访问通过引用传递的值比访问值传递的值要慢。

但这又回到了我所说的关于从堆栈中复制的说法。我只是偏执狂吗?这种行为是让编译器担心而不是我。

我可以单步执行我知道的程序集,但是,谷歌搜索速度更快,而且空白了。

2 个答案:

答案 0 :(得分:3)

考虑一下:

<强>非参考

  • 在堆栈上分配一个int
  • 将值复制到堆栈
  • 像往常一样调用该功能
  • 使用堆栈上的变量

<强>参考

  • 在堆栈上分配指针
  • 将int的地址复制到堆栈
  • 像往常一样调用该功能
  • 取消引用堆栈上的变量(可能在同一个函数中多次)
  • 使用变量

使用参考版本的速度稍慢。但一般来说,让编译器担心它。如果它是一个只读值,只需给它一个常规的旧int。如果需要修改调用者的值,请使用引用或指针。

当然,只有像int这样的小数据类型才有效。如果你正在谈论像结构或其他更大的东西,那么使用引用可能会更快。

答案 1 :(得分:1)

传递引用时,复制引用的值,都是相同的。当你使用它时,你会间接浪费几个周期,但除此之外没有性能差异。

当然,如果你抛弃constness,或者你在另一个线程上更改引用值,程序行为可能会有所不同。