move函数 临时对象

用法

(1) move函数:右值看重对象的值而不考虑地址,move函数可以对一个左值使用,使操作系统不再在意其地址属性,将其完全视作一个右值。

#include <iostream>

// 右值引用 只能绑定右值
int main() {
    int i = 100;
    int&& rrefI = std::move(i);   // std::move(i)这个整体是右值
    i = 20;                       // 但是i还是左值,千万不要再使用i,否则move就没有意义了;
    std::cout << "i: " << i << " rrefI: " << rrefI << std::endl;
    return 0;
}

move函数让操作的对象失去了地址属性,所以我们有义务保证以后不再使用该变量的地址属性,简单来说就是不再使用该变量,因为左值对象的地址是其使用时无法绕过的属性

(2) 临时对象:右值都是不体现地址的对象。那么,还有什么能比临时对象更加没有地址属性呢?

所以右值引用主要负责处理的就是临时对象。 程序执行时生成的中间对象就是临时对象,注意,所有的临时对象都是右值,因为临时对象产生后很快就可能被销毁,使用的是它的值属性