【发布时间】:2012-08-07 23:15:10
【问题描述】:
可能重复:
Is it better in C++ to pass by value or pass by constant reference?
我知道 C++ 中按值、指针和引用传递的区别,我认为在 C++ 中按值(而不是 const 引用)传递对象几乎总是一个编程错误。
void foo(Obj o); ... // Bad
void foo(const Obj &o); ... // Better
我能想到的唯一适合按值传递而不是 const 引用的情况是对象小于引用,因此按值传递更有效。
但是,这肯定是编译器旨在确定的事情吗?
为什么 C++ 实际上需要通过值传递和通过 const 引用传递,并且 - 编译器是否允许在适当的情况下自动将调用转换为(和从)const 引用?
(似乎有 100 多个 C++ 调用约定问题,询问(比如说)值和引用之间的差异 - 但我找不到一个问“为什么?”的问题。)
【问题讨论】:
-
每次您需要副本时怎么办?添加
Obj o2(o);作为第一行?这似乎毫无意义。另外,移动语义。 -
@delnan - 谢谢。我通常按照您的描述进行操作,因为我认为这是函数的实现细节,不应构成其外部签名的一部分。
-
@Nemo。对了谢谢。投票关闭!可悲的是,蜂巢思维是一种比 SO 内置的更好的搜索工具......
-
@Roddy:不用担心。不幸的是,在 SO 上找到旧答案肯定变得越来越难。
-
@Roddy:你的意思是引用然后在第一行的函数中复制?