我读到它们在概念上是平等的.在实践中,是否有任何场合
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-ref和by-val之间的区别很感兴趣.
我曾经认为by-const-ref可以在调用案例中替换值,因为即使Herb Sutter和Bjarne说它们在概念上是相等的,并且"by ref"(是const)意味着更快.直到最近,我在某处读到了在某些情况下可以更好地优化by-val.
那么何时以及如何?
Jam*_*kin 10
通常应该通过值传递内置类型和小对象(例如STL迭代器).
这部分是为了增加编译器的优化机会.编译器很难知道参考参数是否混淆了另一个参数或全局 - 它可能必须通过函数多次从内存重新读取对象的状态,以确保值没有改变.
这就是C99 restrict
关键字的原因(同样的问题,但有指针).
如果你想t
在你的方法的主体中进行本地修改(不影响原始)(比如在计算某些东西的过程中),第一种方法将是优先的.