std::move() 只是强制转换?

Hei*_*Hei 3 c++11

我已经阅读了 std::move() 的一些(伪)实现。所有这些都只是丢弃参数的引用,然后将其作为右值引用返回。

除此之外,它没有做任何其他事情。

不过,我很好奇:1.它的作用是否不止于此。2. 标准是否明确指出,以便调用者应该意识到副作用。

在《C++ 编程语言》第四版一书中,它指出“move(x) 将 x 标记为销毁,因此应谨慎使用 move(x)”。

这是否意味着标准存在副作用,因此编译器可以进行某些优化?

提前致谢。

Ria*_*iaD 5

是的,这与标准中的描述完全一样。在N4659(这是我找到的最后一份草稿)

\n\n

它在 \xc2\xa723.2.5 中说

\n\n
\n

template <class T> constexpr remove_reference_t<T>&& move(T&& t) noexcept;

\n\n

返回:static_cast<remove_reference_t<T>&&>(t)

\n
\n\n

它不会标记任何要销毁的内容,并且不会更改对象,但对象可能会在接受右值的函数中更改(例如移动构造函数、移动赋值运算符)

\n