文章插图
1、左值和右值的概念C++中左值(lvalue)和右值(rvalue)是比较基础的概念,虽然平常几乎用不到,但C++11之后变得十分重要,它是理解 move/forward 等新语义的基础 。
左值与右值这两个概念是从 C 中传承而来的,左值指既能够出现在等号左边,也能出现在等号右边的变量;右值则是只能出现在等号右边的变量 。
int a; // a 为左值a = 3; // 3 为右值
- 左值是可寻址的变量,有持久性;
- 右值一般是不可寻址的常量,或在表达式求值过程中创建的无名临时对象,短暂性的 。
2、左值引用和右值引用
- 左值引用:引用一个对象;
- 右值引用:就是必须绑定到右值的引用,C++11中右值引用可以实现“移动语义”,通过 && 获得右值引用 。
int x = 6; // x是左值,6是右值int &y = x; // 左值引用,y引用xint &z1 = x * 6; // 错误,x*6是一个右值const int &z2 =x * 6; // 正确,可以将一个const引用绑定到一个右值int &&z3 = x * 6; // 正确,右值引用int &&z4 = x; // 错误,x是一个左值
右值引用和相关的移动语义是C++11标准中引入的最强大的特性之一,通过std::move()可以避免无谓的复制,提高程序性能 。【C++中左值和右值的理解】
推荐阅读
- C 与 C++ 40 年的爱恨情仇
- 红茶的营养价值,茶水的营养价值有哪些
- 老白茶的药用价值,老白茶的功效介绍
- 怎么挑选羊腰?
- 师生关系的意义以及教育价值
- 吃鹰嘴豆上火吗?鹰嘴豆的营养价值有哪些?
- 吃豆馅上火吗?豆馅的营养价值有哪些?
- 吃鲳鱼上火吗?鲳鱼的营养价值有哪些?
- 吃小豆粥上火吗?小豆粥的营养价值有哪些?
- 吃奶昔上火吗?奶昔的营养价值有哪些?