Переместить значение в аргумент шаблона функции или нет?

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

Не делай этого.

Другие вопросы по тегам