this指针
- this指针是一个隐含于每一个非静态成员函数中的特殊指针。它指向调用该成员函数的那个对象。
- 当对一个对象调用成员函数时,编译程序先将对象的地址赋给 this指针,然后调用成员函数,每次成员函数存取数据成员时,都隐式使用 this指针。
- 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。
- this指针被隐含地声明为: ClassName *const this,这意味着不能给 this 指针赋值;在 ClassName类的 const成员函数中,this指针的类型为:const ClassName* const,这说明this指针所指向的这种对象是不可修改的(即不能对这种对象的数据成员进行赋值操作);
- this并不是一个常规变量,而是个右值,所以不能取得 this的地址(不能 &this)。
- 在以下场景中,经常需要显式引用 this指针:
1. 为实现对象的链式引用;
2. 为避免对同一对象进行赋值操作(对于赋值运算符);
3. 在实现一些数据结构时,如 list。
注:
1. 右值
- 左值是可寻址的变量,有持久性;
- 右值一般是不可寻址的常量,或在表达式求值过程中创建的无名临时对象,短暂性的。
左值和右值主要的区别之一是左值可以被修改,而右值不能。
2. 链式引用
1. 链式编程思想
函数返回的是this指针的解引用,也就是被调用函数的对象
例如c++的输出函数 cout,它可以无限追加,这就是链式编程思想
2. 返回值必须为引用
返回值为对象引用:返回的是对象本身
返回值为对象:此函数
return *this
返回时,由于此函数返回值类型是对象,所以此处会创建一个临时对象