обычно компилятор не может вывести аргумент templpate в этом случае (это проблема, связанная с шаблоном).

у написать шаблонную функцию таким образом

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 которые были в ответах на мойпредыдущий вопрос, но люди не используют их везде, не так ли? Есть ли эмпирическое правило для этого? Благодарю.

Ответы на вопрос(5)

Ваш ответ на вопрос