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

阅读更多
想对作者说点什么?

博主推荐

换一批

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