Нужно ли объединять std::move с std::forward при использовании универсальных ссылок? Например, какой из следующих двух фрагментов кода правильный?
void bar(auto && x) {
auto y(std::move(std::forward<decltype(x)>(x)));
}
or
void bar(auto && x) {
auto y(std::move(x));
}
По сути, я хочу переместить память x в y, и мне все равно, является ли это ссылкой на l-значение или ссылкой на r-значение. Конечно, мне не нужны здесь значения const
.
auto y(std::move(x))
, который не выполняет переадресацию, а просто приводит к ссылке rvalue. Помните, чтоstd::forward<T>()
— это условное приведение к rvalue- или lvalue-ссылке (в зависимости от категории значения), аstd::move()
— это безусловное приведение к rvalue-ссылке. - person 0x499602D2   schedule 07.01.2015