什么是左值 / 右值左值可以取地址、有名字、可持久存在int a 10; int* p a; // 可以取地址特点有名字a可以多次使用生命周期长作用域内一直存在右值临时值 / 不能取地址严格说不该取int a 10; int b a 5; // a5 是右值特点没名字匿名临时对象表达式结束就销毁左值引用int a 10; int ref a;本质给变量起别名特点总结必须绑定左值一旦绑定不能改绑修改引用 修改原变量int a 10; int r a; r 20; cout a; // 20不能绑定右值int r 10; // 错误因为右值是临时变量马上销毁引用它会变成悬空引用右值引用int r 10;可以绑定右值临时对象特点总结专门绑定右值可以修改临时对象延长临时对象生命周期int r 10; r 20; // 合法核心区别特性左值引用 右值引用 绑定对象左值右值是否可修改可以可以生命周期影响不改变延长临时对象生命周期用途变量别名资源转移 / 移动语义最重要的为什么要有右值引用核心目的避免不必要的拷贝提高性能例子没有右值引用vectorint v1 {1,2,3}; vectorint v2 v1; // 拷贝慢使用右值引用移动语义vectorint v1 {1,2,3}; vectorint v2 std::move(v1); // 移动快本质不复制数据直接“偷资源”指针左值引用 别名机制右值引用 资源转移机制