- 它唯一的功能是将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义。
- 代码如下:
template <typename T> typename remove_reference<T>::type&& move(T&& t) { return static_cast<typename remove_reference<T>::type&&>(t); }
template <class T> struct remove_reference { typedef typename boost::detail::remove_rvalue_ref<T>::type type; }; template <class T> struct remove_reference<T&> { typedef T type; };
- 通过remove_refrence<T>::type模板移除T&&,T&的引用把类型强制转化为右值引用
- 移动之后,
C++11
的标准类库的说法就是——“仍然有效,但状态不明”,实际上一般情况下为空,但并不能保证。以string
为例说明std::string t = "xmas", u; u = std::move(t); // OK: t = "X"; 再赋值是没有问题的,因为仍然有效 // OK: t.size() ; 求大小也没问题,但不能保证得到是什么 // NG: t[2]; 有可能报错,因为有可能是空的
- move移动前后 形参和返回值地址不一样,只是内部资源被返回值代理了,行参的指向不确定
remove_refrance/std::move
于 2020-04-17 21:50:22 首次发布