GCC 4.7 в режиме С++ 11 позволяет мне определить функцию, берущую лямбду двумя разными способами:
// 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 внутри. Из первых двух, что предпочтительнее для производительности, если я конкретно знаю, что я прохожу lambdas, и почему не разрешено передавать лямбда на последний?