this指针
一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。
this指针的作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员函数的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。
举个栗子
struct Sales_data { std::string isbn() const { return bookNo; } // std::string isbn() const { return this->bookNo; } std::string bookNo; }; int main() { Sales_data total; std::string isbn = total.isbn(); return 0; }
插一句:定义在类内部的函数是隐式的inline函数。
正式开始解析这个例子:
首先是函数调用:total.isbn()
我们使用点运算符来访问total对象的isbn成员,然后调用它。
当我们调用isbn这个成员函数时,实际上是在替某个对象调用它。如果isbn指向Sales_data的成员(如bookNo)。则它隐式地指向调用该函数的对象的成员。
在这个例子中,isbn返回bookNo时,实际上它隐式的返回total.bookNo
成员函数通过一个名为this的额外的隐式参数来访问调用它的那个对象,当我们调用一个成员函数时,用请求该函数的对象地址初始化this。
在这个例子中,total.isbn()过程中,编译器负责把total的地址传递给isbn的隐式形参this。等价于Sales_data::isbn(&total)。调用Sales_data的isbn成员时传入了total的地址。
在成员函数内部,我们可以直接使用调用该函数的对象的成员,而无须通过成员访问运算符来做到这一点。因为this所指的正是这个对象。任何对类成员的直接访问都被看作this的隐式引用,也就是说,当isbn使用bookNo时,它隐式地使用this指向成员。等价于this->bookNo
this的目的总是指向“这个”对象,所以this是一个常量指针。我们不允许改变this中保存的地址。