我可以用这种方式编写模板化函数
template<class T> void f(T x) {...}
Run Code Online (Sandbox Code Playgroud)
或者这样
template<class T> void f(T const& x) {...}
Run Code Online (Sandbox Code Playgroud)
我猜第二个选项可以更加优化,因为它明确地避免了副本,但我怀疑它也可能因某些特定类型T(例如仿函数?)而失败.那么,什么时候应该使用第一个选项,何时使用第二个选项?还有这个boost::call_traits<T>::param_type和boost::reference_wrapper那个在我之前的问题的答案,但人们不到处使用它们,是吗?这有经验法则吗?谢谢.