Переместить значение в аргумент шаблона функции или нет?
Мой вопрос заключается в том, имеет ли смысл std::move (или нет) prvalue в шаблон функции всеобщего охвата, который соответственно принимает универсальную ссылку T&& в своей подписи. Также я хотел бы знать, играет ли роль в этом решении elision/RVO copy-move.
Вопрос (ы): Приведет ли свертывание ссылок к тому, что foo будет вызываться с T&& (ссылка на rvalue) с или без std:: move и оказывает ли RVO какое-либо влияние на это (или это на RVO)?
template < typename T >
void foo(T&& arg)
{
//Whatever..
}
A func()
{
A m;
return m;
}
// called anywhere you like
foo(std::move(func()));
Заранее спасибо Сэм
1 ответ
Решение
Тот move
не имеет никакого эффекта, кроме как заставить компилятор, оптимизатор и читателей вашего кода выполнять более бессмысленную работу.
Не делай этого.