左值与右值
c++中的左值与右值、左值引用与右值引用。
左值与右值
左值与右值的概念
左值指既能够出现在等号左边,也能出现在等号右边的变量;右值则是只能出现在等号右边的变量。
1 |
|
左值
左值具有以下特征:
- 可通过取地址运算符获取其地址
- 可修改的左值可用作内建赋值和内建符合赋值运算符的左操作数
- 可以用来初始化左值引用
常见的左值:
- 变量名、函数名以及数据成员名
- 返回左值引用的函数调用
- 由赋值运算符或复合赋值运算符连接的表达式,如(a=b, a-=b等)
- 解引用表达式*ptr
- 前置自增和自减表达式(++a, ++b)
- 成员访问(点)运算符的结果
- 由指针访问成员(
->
)运算符的结果 - 下标运算符的结果(
[]
) - 字符串字面值(“abc”)
1 |
|
右值
以下表达式的值都是纯右值:
- 字面值(字符串字面值除外),例如1,’a’, true等
- 返回值为非引用的函数调用或操作符重载,例如:str.substr(1, 2), str1 + str2, or it++
- 后置自增和自减表达式(a++, a–)
- 算术表达式
- 逻辑表达式
- 比较表达式
- 取地址表达式
- lambda表达式
1 |
|
左值引用和右值引用
在C++11之前,引用分为左值引用和常量左值引用两种,但是自C++11起,引入了右值引用,也就是说,在C++11中,包含如下3中引用:
- 左值引用
- 常量左值引用(不希望被修改)
- 右值引用
在C++11中引入了右值引用,因为右值的生命周期很短,右值引用的引入,使得可以延长右值的生命周期。在C++中规定,右值引用是&&即由2个&表示,而左值引用是一个&表示。C++11中右值引用可以实现“移动语义”。右值引用的作用是为了绑定右值
。
1 |
|
参考链接:
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!