【发布时间】:2011-06-20 02:24:24
【问题描述】:
我可以这样写一个模板函数
template<class T> void f(T x) {…}
或者这样
template<class T> void f(T const& x) {…}
我猜第二个选项可能更优化,因为它明确地避免了复制,但我怀疑它对于某些特定类型T(例如仿函数?)也可能失败。
那么,什么时候应该使用第一个选项,什么时候使用第二个呢?还有这个boost::call_traits<T>::param_type 和boost::reference_wrapper 在我的previous question 的答案中,但人们不会到处使用它们,是吗?这有经验法则吗?谢谢。
【问题讨论】:
-
冒着看起来很愚蠢的风险,我必须问:函子怎么会失败?
-
@Beta:这是一个随机猜测。如果有人能解释在哪些情况下它实际上会失败,我会很感兴趣。
-
你想要达到什么目的?这取决于
f中的内部代码。 -
@David Rodríguez - dribeas:这是一个更普遍的问题
标签: c++ templates pass-by-reference pass-by-value