remove_refrance/std::move

  1. 它唯一的功能是将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义。
  2. 代码如下:
    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; 
    };

  3. 通过remove_refrence<T>::type模板移除T&&,T&的引用把类型强制转化为右值引用
  4. 移动之后,C++11的标准类库的说法就是——“仍然有效,但状态不明”,实际上一般情况下为空,但并不能保证。以string为例说明
    std::string t = "xmas", u;
    u = std::move(t);
    
    // OK: t = "X";  再赋值是没有问题的,因为仍然有效
    // OK: t.size() ; 求大小也没问题,但不能保证得到是什么
    // NG: t[2];     有可能报错,因为有可能是空的
    
  5. move移动前后 形参和返回值地址不一样,只是内部资源被返回值代理了,行参的指向不确定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值