Hei*_*Hei 3 c++11
我已经阅读了 std::move() 的一些(伪)实现。所有这些都只是丢弃参数的引用,然后将其作为右值引用返回。
除此之外,它没有做任何其他事情。
不过,我很好奇:1.它的作用是否不止于此。2. 标准是否明确指出,以便调用者应该意识到副作用。
在《C++ 编程语言》第四版一书中,它指出“move(x) 将 x 标记为销毁,因此应谨慎使用 move(x)”。
这是否意味着标准存在副作用,因此编译器可以进行某些优化?
提前致谢。
Ria*_*iaD 5
是的,这与标准中的描述完全一样。在N4659(这是我找到的最后一份草稿)
它在 \xc2\xa723.2.5 中说
\n template <class T> constexpr remove_reference_t<T>&& move(T&& t) noexcept; \n\n 返回:static_cast<remove_reference_t<T>&&>(t)\n
template <class T> constexpr remove_reference_t<T>&& move(T&& t) noexcept;
返回:static_cast<remove_reference_t<T>&&>(t)
static_cast<remove_reference_t<T>&&>(t)
它不会标记任何要销毁的内容,并且不会更改对象,但对象可能会在接受右值的函数中更改(例如移动构造函数、移动赋值运算符)
归档时间:
8 年,1 月 前
查看次数:
1372 次
最近记录: