std::move() is just casting?

前端 未结 2 1612
执笔经年
执笔经年 2021-01-21 06:56

I have read a few (pesudo) implementions of std::move(). And all are just casting away the reference of the parameter and then returning it as a rvalue reference.

It do

相关标签:
2条回答
  • 2021-01-21 07:36

    Yes, that's exactly as it is described in the standard. In N4659 (which is last draft I found)

    it says in §23.2.5

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

    Returns: static_cast<remove_reference_t<T>&&>(t)

    It doesn't mark anything for destruction, and it doesn't change the object but object may be changed in function that accepts rvalue (such as move constructor, move assignment operator)

    0 讨论(0)
  • 2021-01-21 07:59

    Yes, std::move is a bit of a misnomer as it doesn't actually move anything. It is used to indicate that an object may be "moved from".

    It does this by casting the object to a T&&. cppreference states the return value is static_cast<typename std::remove_reference<T>::type&&>(t). (btw, that is exactly what VS2017 does)

    I don't know precisely what the standard says on the matter.

    0 讨论(0)
提交回复
热议问题