C++11 模式下的 GCC 4.7 让我定义了一个采用 lambda 的函数,有两种不同的方式:
// by value
template<class FunctorT>
void foo(FunctorT f) { /* stuff */ }
和:
// by r-value reference
template<class FunctorT>
void foo(FunctorT&& f) { /* stuff */ }
但不是:
// by reference
template<class FunctorT>
void foo(FunctorT& f) { /* stuff */ }
我知道我可以取消对函数的模板化,而只使用 std::functions ,但是foo
它很小而且是内联的,我想给编译器最好的机会来内联对它内部的 f 的调用。在前两个中,如果我特别知道我正在传递 lambda,这对于性能来说更可取,为什么不允许将 lambda 传递给最后一个?