Dav*_*vid 3 c++ move-semantics
这是std::move(). 它不完全符合标准的细节,但非常接近:
template<class T>
typename std::remove_reference<T>::type&&
myMove( T&& Arg )
{
return ( ( typename std::remove_reference<T>::type&& )Arg );
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这是行不通的,如果我们更换typename std::remove_reference<T>::type&&由T&&,即
template<class T>
typename std::remove_reference<T>::type&&
myMove( T&& Arg )
{
return ( (T&&) Arg );
}
Run Code Online (Sandbox Code Playgroud)
问题实际上不在于移动,而在于T&&.
我将专注于演员(T&&)以及为什么这不起作用。
鉴于上面列出的参考折叠规则;
T& & 变成 T&T& && 变成 T&T&& & 变成 T&T&& && 变成 T&&当T被推导为左值引用时,问题就出现了,然后T&&变成T& &&了 折叠T&,给定转换,您只是将其转换回左值引用,而您还没有获得能够发生移动的右值引用。
在std::remove_reference<T>::type那里删除所有引用,&&然后添加回右值引用,从而确保进行正确的转换。
的typename是有消歧超过一个成员变量的成员类型。
| 归档时间: |
|
| 查看次数: |
1493 次 |
| 最近记录: |