@@ -43,7 +43,7 @@ Lambda 表达式的基本语法如下:
43
43
44
44
** 1. 值捕获**
45
45
46
- 与参数传值类似,值捕获的前期是变量可以拷贝 ,不同之处则在于,被捕获的变量在 lambda 表达式被创建时拷贝,而非调用时才拷贝:
46
+ 与参数传值类似,值捕获的前提是变量可以拷贝 ,不同之处则在于,被捕获的变量在 lambda 表达式被创建时拷贝,而非调用时才拷贝:
47
47
48
48
``` cpp
49
49
void learn_lambda_func_1 () {
@@ -253,13 +253,13 @@ int main()
253
253
std::string&& rv1 = std::move(lv1); // 合法, std::move可以将左值转移为右值
254
254
std::cout << rv1 << std::endl; // string,
255
255
256
- const std::string& lv2 = lv1 + lv1; // 合法, 常量左值引用能够延长临时变量的申明周期
256
+ const std::string& lv2 = lv1 + lv1; // 合法, 常量左值引用能够延长临时变量的生命周期
257
257
// lv2 += "Test"; // 非法, 引用的右值无法被修改
258
258
std::cout << lv2 << std::endl; // string,string
259
259
260
- std::string&& rv2 = lv1 + lv2; // 合法, 右值引用延长临时对象声明周期
260
+ std::string&& rv2 = lv1 + lv2; // 合法, 右值引用延长临时对象生命周期
261
261
rv2 += "Test"; // 合法, 非常量引用能够修改临时变量
262
- std::cout << rv2 << std::endl; // string,string,string,
262
+ std::cout << rv2 << std::endl; // string,string,string,Test
263
263
264
264
reference(rv2); // 输出左值
265
265
@@ -425,7 +425,7 @@ std::forward 传参:左值引用
425
425
426
426
唯独 ` std::forward ` 即没有造成任何多余的拷贝,同时** 完美转发** \( 传递\) 了函数的实参给了内部调用的其他函数。
427
427
428
- > ` std::forward ` 和 ` std::move ` 一样,没有做任何事情,` std::move ` 单纯的将左值转化为右值,` std::forward ` 也只是单纯的将参数做了一个类型的转换,从是线上来看 ,` std::forward<T>(v) ` 和 ` static_cast<T&&>(v) ` 是完全一样的。
428
+ > ` std::forward ` 和 ` std::move ` 一样,没有做任何事情,` std::move ` 单纯的将左值转化为右值,` std::forward ` 也只是单纯的将参数做了一个类型的转换,从现象上来看 ,` std::forward<T>(v) ` 和 ` static_cast<T&&>(v) ` 是完全一样的。
429
429
430
430
## 总结
431
431
0 commit comments