Рассмотрим этот код:
template<class F>
void foo1(F f) { f(); }
template<class F>
void foo2(F const& f) { f(); }
template<class F>
void foo3(F&& f) { f(); }
Какую версию foo
мне следует использовать? foo1
- это то, что я вижу больше всего «в дикой природе», но я боюсь, что это может привести к появлению копий, которые мне не нужны. У меня есть специальный функтор, который довольно тяжело копировать, поэтому я бы хотел этого избежать. В настоящее время я склоняюсь к foo3
(так как foo2
не допустит мутирующих функторов), но я не уверен в последствиях.
Я нацеливаюсь на C ++ 11.