是否有任何特定的情况,其中pass-by-value比C++中的pass-by-const-reference更受欢迎?

t.g*_*.g. 6 c++

我读到它们在概念上是平等的.在实践中,是否有任何场合

foo(T t) 
Run Code Online (Sandbox Code Playgroud)

比...更受欢迎

foo(const T& t)
Run Code Online (Sandbox Code Playgroud)

?为什么?


到目前为止,感谢您的答案,请注意我并不是在询问by-ref和by-val之间的区别.

实际上我对by-const-refby-val之间的区别很感兴趣.

我曾经认为by-const-ref可以在调用案例中替换值,因为即使Herb Sutter和Bjarne说它们在概念上是相等的,并且"by ref"(是const)意味着更快.直到最近,我在某处读到了在某些情况下可以更好地优化by-val.

那么何时以及如何?

Jam*_*kin 10

通常应该通过值传递内置类型和小对象(例如STL迭代器).

这部分是为了增加编译器的优化机会.编译器很难知道参考参数是否混淆了另一个参数或全局 - 它可能必须通过函数多次从内存重新读取对象的状态,以确保值没有改变.

这就是C99 restrict关键字的原因(同样的问题,但有指针​​).


Pau*_*ier 5

如果你想t在你的方法的主体中进行本地修改(不影响原始)(比如在计算某些东西的过程中),第一种方法将是优先的.

  • const说明符将阻止修改,从而使编译器明白你不打算改变那个变量. (5认同)