[C++] this指针

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中保存的地址。

原文地址:https://www.cnblogs.com/immjc/p/8227936.html