右值引用move

对于所调用的函数里面的临时变量,在函数调用过程中是被压到程序进程的栈中的,当函数退出时,临时变量出栈,即临时变量已经被销毁,临时变量占用的内存空间没有被清空,但是已经可以被分配给其他变量了,所以有可能在函数退出时,该内存已经被修改了,对于临时变量来说已经是没有意义的值了。 

 

int&& fun(int &&n)
{
    int num1 = n+1;
    int num2 = move(num1); //临时变量拷贝到num2
    return move(num2); //num为局部变量,函数返回出栈为临时变量。(临时变量和局部变量是同一个)
    //return num; //错误,num为左值
}

int main()
{
    int a = 5;
    fun(a+1); //正确,a+1 为表达式,临时变量
    //fun(a);   //错误,a为变量,左值
    int&& num = fun(4); //右值引用,临时变量长时间驻留
}

 

posted @ 2020-05-14 17:57  wjbooks  阅读(238)  评论(0)    收藏  举报