c++ move和forward

右值引用、移动语义和完美转发可以参考这篇文章 https://www.jianshu.com/p/d19fc8447eaa

一.move

/usr/include/c++/7/bits/move.h

template
        constexpr typename std::remove_reference<_Tp>::type&&
        move(_Tp&& __t) noexcept
        { return static_cast::type&&>(__t); }

remove_reference的实现如下

/usr/include/c++/7/type_traits

  /// remove_reference
  template 
    struct remove_reference
    { typedef _Tp   type; };

  template 
    struct remove_reference<_Tp&>
    { typedef _Tp   type; };

  template 
    struct remove_reference<_Tp&&>
    { typedef _Tp   type; };

二.forward

/usr/include/c++/7/bits/move.h

template
        constexpr _Tp&&
        forward(typename std::remove_reference<_Tp>::type& __t) noexcept
        { return static_cast<_Tp&&>(__t); }

 

你可能感兴趣的:(C++)