何时应该在函数中使用const引用而不是const值?

6
在64位系统中,const& 占用8个字节。对于小于8个字节的值和对象,传递值而不是引用是更合理的选择。即使是一个8字节的对象,复制它比传递引用再访问对象要便宜得多。
在什么阈值下应该优先选择const引用而不是const值?

10
如果它很重要,我会对其进行衡量。否则,我不会过多担心它。 - Mike Seymour
2
这严重取决于对象和复制构造函数。你的对象可能只持有一个指向10Mb内存块的8字节指针。通过值传递,你可能会调用复制构造函数,它将复制这10Mb的数据... - lapk
1
如果你按值传递,你不会得到任何东西,因为字长仍然是8个字节,并且用于参数的寄存器(这可能取决于调用约定)也是如此。 - vlad_tepesch
1个回答

10
对于小于8个字节的值和对象,通过值传递比通过引用传递更为合理。即使是8个字节的对象,复制比传递引用再访问对象更便宜。
不能保证引用被实现为指针,实际上根据§8.3.2/4:
“是否需要存储引用是未指定的”
在什么阈值下您应该优先选择const引用而不是const值?
情况非常简单:
- 当您只想读取值时,请使用const引用 - 当您总是最终在函数内部复制对象时,请使用值 - 当您想在函数内修改对象时,请使用引用

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接