校园门户网站建设,42区 网站开发指南,wordpress换域名后无缩约图,网站建设 源码准备先说左值和右值#xff0c;简单来说可以放到等号左边的值叫做左值#xff0c;可以放到等号右边的值叫做右值。 详细的说#xff0c;左值是有明确的地址#xff0c;是具有名字的#xff0c;是可以对左值进行取地址操作的#xff0c;因为它在内存中有明确的地址和名字… 先说左值和右值简单来说可以放到等号左边的值叫做左值可以放到等号右边的值叫做右值。 详细的说左值是有明确的地址是具有名字的是可以对左值进行取地址操作的因为它在内存中有明确的地址和名字可以赋值也可以被赋值比如说变量数组等都是左值。 右值在内存中没有明确的地址没有名字不能长期在内存中驻留不能对右值进行取地址的操作。 右值在c11中又分为纯右值和将亡值常量和临时变量都是纯右值纯右值就是传统意义上的右值纯右值在它的表达式结束后就会被销毁。将亡值是右值将亡值是表示即将被销毁可以安全地被“窃取”也就是移动操作资源的对象。 那什么是右值引用 为了实现将亡值C引入了一种特殊的引用类型即右值引用也就是说右值引用是为了实现将亡值得右值引用的标识符是。只有将亡值能够绑定到右值引用上。 但将亡值和纯右值不同因为将亡值有识别符可以通过识别符找到他们。使用std::move()函数可以将左值转为将亡值这样就可以用右值引用来获取其资源延长其生命周期。
int rvr 1; // 将亡值它有一个识别符rvr我们可以通过rvr找到它。int foo(){ return 1; }
int val1 foo(); // 调用foo()返回临时值此为纯右值它没有识别符我们不能通过识别符找到它。
使用move来将左值转换成右值后调用移动构造函数来将其内存转移
#include iostream
#include utility // for std::movevoid print(int num)
{std::cout num std::endl;
}int main()
{int a 5; // a是一个左值print(std::move(a)); // 使用std::move将a转换为右值return 0;
}