原则:
原则1:右值可以赋给左值,左值不能给右值(左值权限更大)
原则2:右值无法修改
原则3:编译器允许为左值建立引用,不可以为右值建立引用:int &b = num; √ int &b = 10; ×
右值引用 :
1)右值引用必须要进行初始化
2)不能使用左值进行初始化
3)右值引用可以对右值进行修改
好处:
当返回值为右值引用时,会把返回的临时变量中的内存居为己用,仍保持了有效性,也避免了拷贝(左值引用的用处)。
应用:
移动语义:移动语义具体实现是基于移动构造和移动赋值,而移动构造函数和移动赋值函数都需要形参为右值引用类型。(move函数强制转换左值成右值)
完美转发:函数模板在向其他函数传递自身形参时,如果相应实参是左值,它就应该被转发为左值;同样如果相应实参是右值,它就应该被转发为右值。作用是保留在其他函数指针对转发而来的参数的左右值属性进行不同处理。