我试图了解更多的移动语义。现在这是一个可能的实现std::move
:
template <typename T>
typename std::remove_reference<T>::type&& move_(T&& obj)
{
return static_cast<typename std::remove_reference<T>::type&&>(obj);
}
但我对其进行了一些编辑以了解其工作原理:
template <typename T> typename std::remove_reference<T>::type&& move_(T&& obj) { if(std::is_lvalue_reference<decltype(obj)>::value) return static_cast<typename std::remove_reference<T>::type&&>(obj); return obj; // dones't work? // return (string&&)obj; // ok works } auto s = move_(std::string("Hi there!")); // passing an rvalue cause instantiating: `string&&(string&&){}`.
但是为什么我不能直接返回实例化后obj
的哪个呢?rvalue-reference type