3

我试图了解更多的移动语义。现在这是一个可能的实现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

4

0 回答 0