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++右引用。

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭