6
6
7
7
# 第 3 章 语言运行期的强化
8
8
9
- > 内容修订中
10
-
11
9
[ TOC]
12
10
13
11
## 3.1 Lambda 表达式
@@ -73,7 +71,7 @@ void learn_lambda_func_2() {
73
71
* \[ &\] 引用捕获, 让编译器自行推导捕获列表
74
72
* \[ =\] 值捕获, 让编译器执行推导应用列表
75
73
76
- ** 4. 表达式捕获\( C++14 \) **
74
+ ** 4. 表达式捕获**
77
75
78
76
> 这部分内容需要了解后面马上要提到的右值引用以及智能指针
79
77
@@ -189,15 +187,15 @@ int main() {
189
187
190
188
要弄明白右值引用到底是怎么一回事,必须要对左值和右值做一个明确的理解。
191
189
192
- ** 左值\ ( lvalue, left value\ )** ,顾名思义就是赋值符号左边的值。准确来说,左值是表达式(不一定是赋值表达式)后依然存在的持久对象。
190
+ ** 左值(lvalue, left value)** ,顾名思义就是赋值符号左边的值。准确来说,左值是表达式(不一定是赋值表达式)后依然存在的持久对象。
193
191
194
- ** 右值\ ( rvalue, right value\ )** ,右边的值,是指表达式结束后就不再存在的临时对象。
192
+ ** 右值(rvalue, right value)** ,右边的值,是指表达式结束后就不再存在的临时对象。
195
193
196
194
而 C++11 中为了引入强大的右值引用,将右值的概念进行了进一步的划分,分为:纯右值、将亡值。
197
195
198
- ** 纯右值\ ( prvalue, pure rvalue\ )** ,纯粹的右值,要么是纯粹的字面量,例如 ` 10 ` , ` true ` ;要么是求值结果相当于字面量或匿名临时对象,例如 ` 1+2 ` 。非引用返回的临时变量、运算表达式产生的临时变量、原始字面量、Lambda 表达式都属于纯右值。
196
+ ** 纯右值(prvalue, pure rvalue)** ,纯粹的右值,要么是纯粹的字面量,例如 ` 10 ` , ` true ` ;要么是求值结果相当于字面量或匿名临时对象,例如 ` 1+2 ` 。非引用返回的临时变量、运算表达式产生的临时变量、原始字面量、Lambda 表达式都属于纯右值。
199
197
200
- ** 将亡值\ ( xvalue, expiring value\ )** ,是 C++11 为了引入右值引用而提出的概念(因此在传统 C++中,纯右值和右值是同一个概念),也就是即将被销毁、却能够被移动的值。
198
+ ** 将亡值(xvalue, expiring value)** ,是 C++11 为了引入右值引用而提出的概念(因此在传统 C++中,纯右值和右值是同一个概念),也就是即将被销毁、却能够被移动的值。
201
199
202
200
将亡值可能稍有些难以理解,我们来看这样的代码:
203
201
@@ -418,7 +416,7 @@ std::forward 传参:左值引用
418
416
419
417
无论传递参数为左值还是右值,普通传参都会将参数作为左值进行转发,所以 ` std::move ` 总会接受到一个左值,从而转发调用了` reference(int&&) ` 输出右值引用。
420
418
421
- 唯独 ` std::forward ` 即没有造成任何多余的拷贝,同时** 完美转发** \ ( 传递\ ) 了函数的实参给了内部调用的其他函数。
419
+ 唯独 ` std::forward ` 即没有造成任何多余的拷贝,同时** 完美转发** (传递)了函数的实参给了内部调用的其他函数。
422
420
423
421
> ` std::forward ` 和 ` std::move ` 一样,没有做任何事情,` std::move ` 单纯的将左值转化为右值,` std::forward ` 也只是单纯的将参数做了一个类型的转换,从现象上来看,` std::forward<T>(v) ` 和 ` static_cast<T&&>(v) ` 是完全一样的。
424
422
@@ -430,7 +428,7 @@ std::forward 传参:左值引用
430
428
2 . 函数对象容器 std::function
431
429
3 . 右值引用
432
430
433
- [ 返回目录] ( ./toc.md ) | [ 上一章] ( ./02-usability.md ) | [ 下一章 标准库: 容器] ( ./04-containers.md )
431
+ [ 返回目录] ( ./toc.md ) | [ 上一章] ( ./02-usability.md ) | [ 下一章 容器] ( ./04-containers.md )
434
432
435
433
## 许可
436
434
0 commit comments