Трябва ли 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