zoukankan      html  css  js  c++  java
  • [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中保存的地址。

  • 相关阅读:
    mongodb的sql日志
    mysql – 在WHERE子句中使用substr的SELECT语句
    MySQL视图
    Linux简单查找log
    转 信号量与PV操作
    二进制小数及 IEEE 浮点表示
    转 :原码,反码,补码
    转:C# Delegate委托 1
    C#中Invoke的用法2
    C#中Invoke的用法1
  • 原文地址:https://www.cnblogs.com/immjc/p/8227936.html
Copyright © 2011-2022 走看看