我可以写一个模板函数这样模板按值传递或const引用或...?
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 2011-02-02 16:22:06
@贝塔:这是一个随机猜测。如果有人能够解释在哪些情况下它实际上可能会失败,我会感兴趣。 – 2011-02-02 16:23:40
你试图实现什么?它取决于`f`中的内部代码。 – 2011-02-02 16:39:44