C++11右值引用,移动主义

理解1: 左值和右值针对等号而言, 等号左边称为左值, 等号右连称为右值.

理解2: 左值和右值针对表达式而言, 表达式结束后依然存在的持久对象称为左值, 表达式结束后不存在的持久对象称为右值.

理解3: 左值和右值针对地址而言, 拥有地址的对象称为左值, 没有地址的对象称为右值.

C++11的值分类:

本地图片,请重新上传图片

更简单,直接,形象的理解为:

本地图片,请重新上传

左值可以理解为有地址,有内容

图片

C++以前的赋值默认基于拷贝, 效率低, 性能差. 

亟需向前优化,又须向后兼容. 最佳实践就是使用某种方式区别对待/分开处理二者.

左值, 右值的概念应需而生! 将表达式的值区别左值与右值, 运算符就能采用不同的手段区别对待. 左值沿用拷贝语义, 而右值也催生了移动语义.

左值/右值是古老C++既要进化,又要兼容的一种选择, 同时催生了拷贝语义与移动语义.

其实引用与值的概念完全可以使用指针来实现~感觉更像语法糖, 配合方法重载, 区别处理拷贝与移动语义, 从而减少不必要的对象复制, 结果也就提升了性能.

原文地址:https://www.cnblogs.com/zolo/p/5849049.html