修改 this 指针

This commit is contained in:
huihut 2018-06-13 11:02:29 +08:00
parent be18375fef
commit 3ef0c04155

View File

@ -110,11 +110,11 @@ volatile int i = 10;
2. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给 `this` 指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用 `this` 指针。 2. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给 `this` 指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用 `this` 指针。
3. 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。 3. 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。
4. `this` 指针被隐含地声明为: `ClassName *const this`,这意味着不能给 `this` 指针赋值;在 `ClassName` 类的 `const` 成员函数中,`this` 指针的类型为:`const ClassName* const`,这说明不能对 `this` 指针所指向的这种对象是不可修改的(即不能对这种对象的数据成员进行赋值操作); 4. `this` 指针被隐含地声明为: `ClassName *const this`,这意味着不能给 `this` 指针赋值;在 `ClassName` 类的 `const` 成员函数中,`this` 指针的类型为:`const ClassName* const`,这说明不能对 `this` 指针所指向的这种对象是不可修改的(即不能对这种对象的数据成员进行赋值操作);
5. 由于 `this` 并不是一个常规变量,所以不能取得 `this` 的地址。 5. `this` 并不是一个常规变量,而是个 `右值`所以不能取得 `this` 的地址(不能 `&this`
6. 在以下场景中,经常需要显式引用 `this` 指针: 6. 在以下场景中,经常需要显式引用 `this` 指针:
1. 为实现对象的链式引用; 1. 为实现对象的链式引用;
2. 为避免对同一对象进行赋值操作; 2. 为避免对同一对象进行赋值操作;
3. 在实现一些数据结构时,如 `list` 3. 在实现一些数据结构时,如 `list`
### inline 内联函数 ### inline 内联函数