@@ -69,7 +69,7 @@ void lambda_reference_capture() {
6969
7070#### 3. 隐式捕获
7171
72- 手动书写捕获列表有时候是非常复杂的,这种机械性的工作可以交给编译器来处理,这时候可以在捕获列表中写一个
72+ 手动书写捕获列表有时候是非常复杂的,这种机械性的工作可以交给编译器来处理,这时候可以在捕获列表中写一个
7373` & ` 或 ` = ` 向编译器声明采用引用捕获或者值捕获.
7474
7575总结一下,捕获提供了 Lambda 表达式对外部值进行使用的功能,捕获列表的最常用的四种形式可以是:
@@ -213,14 +213,14 @@ int main() {
213213
214214要弄明白右值引用到底是怎么一回事,必须要对左值和右值做一个明确的理解。
215215
216- ** 左值(lvalue, left value)** ,顾名思义就是赋值符号左边的值。准确来说,
216+ ** 左值** (lvalue, left value),顾名思义就是赋值符号左边的值。准确来说,
217217左值是表达式(不一定是赋值表达式)后依然存在的持久对象。
218218
219- ** 右值(rvalue, right value)** ,右边的值,是指表达式结束后就不再存在的临时对象。
219+ ** 右值** (rvalue, right value),右边的值,是指表达式结束后就不再存在的临时对象。
220220
221221而 C++11 中为了引入强大的右值引用,将右值的概念进行了进一步的划分,分为:纯右值、将亡值。
222222
223- ** 纯右值(prvalue, pure rvalue)** ,纯粹的右值,要么是纯粹的字面量,例如 ` 10 ` , ` true ` ;
223+ ** 纯右值** (prvalue, pure rvalue),纯粹的右值,要么是纯粹的字面量,例如 ` 10 ` , ` true ` ;
224224要么是求值结果相当于字面量或匿名临时对象,例如 ` 1+2 ` 。非引用返回的临时变量、运算表达式产生的临时变量、
225225原始字面量、Lambda 表达式都属于纯右值。
226226
@@ -232,7 +232,7 @@ class Foo {
232232public:
233233 void bar() {
234234 right = "still rvalue"; // 此处字符串字面量为右值
235- }
235+ }
236236};
237237
238238int main() {
@@ -352,19 +352,19 @@ void foo() {
352352class A {
353353public:
354354 int *pointer;
355- A():pointer(new int(1)) {
356- std::cout << "构造" << pointer << std::endl;
355+ A():pointer(new int(1)) {
356+ std::cout << "构造" << pointer << std::endl;
357357 }
358- A(A& a):pointer(new int(*a.pointer)) {
359- std::cout << "拷贝" << pointer << std::endl;
358+ A(A& a):pointer(new int(*a.pointer)) {
359+ std::cout << "拷贝" << pointer << std::endl;
360360 } // 无意义的对象拷贝
361- A(A&& a):pointer(a.pointer) {
361+ A(A&& a):pointer(a.pointer) {
362362 a.pointer = nullptr;
363- std::cout << "移动" << pointer << std::endl;
363+ std::cout << "移动" << pointer << std::endl;
364364 }
365- ~A(){
366- std::cout << "析构" << pointer << std::endl;
367- delete pointer;
365+ ~A(){
366+ std::cout << "析构" << pointer << std::endl;
367+ delete pointer;
368368 }
369369};
370370// 防止编译器优化
0 commit comments