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