[C++] this指针
发布日期:2021-05-07 00:51:08 浏览次数:17 分类:精选文章

本文共 947 字,大约阅读时间需要 3 分钟。

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

上一篇:CPP中的this指针
下一篇:机器学习-白板推导系列笔记(十)-EM算法

发表评论

最新留言

不错!
[***.144.177.141]2025年04月09日 06时58分51秒