Day 6: std::move 理解

move获得一个绑定到左值上的右值引用
1. 如何定义
template<typename T>
typename remove_reference<T>::type&& move(T&& t)
{
return static_cast<typename remove_reference<T>::type&&>(t);
}

2. 工作机制
(1)对于std::move(string &&t);

推断出T为string ->>remove_reference<string>的type成员为string ->>move的返回类型为string&& ->>函数参数t的类型为string&&
即调用实例化,string&& move(string &&t);
(2)string s1("hi");
std::move(s1);

推断出T为string&->>remove_reference<string&> 的type成员为string->>move的返回类型为string&&->>move的函数参数t实例化为string&&&,折叠为string&
调用实例化string&& move(string &t);

3. 从左值static_cast到右值引用
强制类型转换可以防止意外进行转换

习题16.46: 
解释下列循环

for(size_t i=0;i!=size();i++)
alloc.construct(dest++,std::move(dest++,std::move(*elem++);

在dest位置处加入elem++右引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值