【发布时间】:2015-01-07 02:06:51
【问题描述】:
在使用通用引用时,std::move 是否需要与 std::forward 结合使用?比如下面两段代码哪个是正确的?
void bar(auto && x) {
auto y(std::move(std::forward<decltype(x)>(x)));
}
或
void bar(auto && x) {
auto y(std::move(x));
}
基本上,我想将 x 的内存移动到 y 中,我不在乎它是左值引用还是右值引用。当然,我不希望这里有 const 值。
【问题讨论】:
-
没有。只使用其中之一。
-
它们都等价于
auto y(std::move(x)),它不转发,只是转换为右值引用。请记住,std::forward<T>()是对右值或左值引用的条件转换(取决于值类别),而std::move()是对右值引用的无条件转换。