我只是发现自己没有完全理解 std::move()
的逻辑。
起初,我在谷歌上搜索了它,但似乎只有关于如何使用 std::move()
的文档,而没有关于它的结构如何工作的文档。
我的意思是,我知道模板成员函数是什么,但是当我查看 VS2010中的 std::move()
定义时,它仍然令人困惑。
Move ()的定义如下。
template<class _Ty> inline
typename tr1::_Remove_reference<_Ty>::_Type&&
move(_Ty&& _Arg)
{ // forward _Arg as movable
return ((typename tr1::_Remove_reference<_Ty>::_Type&&)_Arg);
}
首先让我感到奇怪的是参数(_ Ty & & _ Arg) ,因为当我像下面这样调用函数时,
// main()
Object obj1;
Object obj2 = std::move(obj1);
它基本上等于
// std::move()
_Ty&& _Arg = Obj1;
但是正如您已经知道的,您不能直接将 LValue 链接到 RValue 引用,这使我认为它应该是这样的。
_Ty&& _Arg = (Object&&)obj1;
然而,这是荒谬的,因为 std: : move ()必须适用于所有值。
因此,为了充分理解它是如何工作的,我还应该研究一下这些结构。
template<class _Ty>
struct _Remove_reference
{ // remove reference
typedef _Ty _Type;
};
template<class _Ty>
struct _Remove_reference<_Ty&>
{ // remove reference
typedef _Ty _Type;
};
template<class _Ty>
struct _Remove_reference<_Ty&&>
{ // remove rvalue reference
typedef _Ty _Type;
};
不幸的是,我还是很困惑,我不明白。
我知道这都是因为我缺乏 C + + 的基本语法技能。 我想知道这些工作如何彻底和任何文件,我可以在互联网上得到的将比欢迎。(如果你能解释一下,那也会很棒的)。