this
指针是一个 隐含于 每一个非静态成员函数中的特殊指针. 它指向正在被该成员函数操作的那个对象- 当一个对象调用其成员函数时, 编译程序会先将对象的地址赋给
this
指针, 然后调用成员函数, 每次成员函数存取数据成员时, 会隐含使用this
指针. - 当一个成员函数被调用时, 自动向它传递一个隐含的参数, 该参数是一个指向这个成员函数所在的对象的指针
this
指针被隐含的声明为:ClassName *const this
, 这意味着不能给this
指针不能再指向其他对象, 在ClassName
类的const
成员函数中,this
指针的类型为const ClassName* const
, 这说明也不能对this
指针所指向的这种对象进行赋值操作.this
并不是一个常规变量, 而是一个 右值, 所以不能取得this
的地址.(不能&this
, 左值右值的区别就在于是否可以取地址)- 在以下场景中, 经常需要显式使用
this
指针:- 为实现对象的链式引用
- 为避免对同一对象进行赋值操作(this.obj = obj, 在构造函数中这种很常用)
- 为实现一些数据结构时, 如
list