• C++ 中的 this 指针


    目录

    1. this 指针的背景简介:

    2. this 指针的语法表示:

    3. this 指针的一些注意点:

    4. this 指针的修饰类型:

    5. this 指针的小结:

    6. this 指针参考资源:


    1. this 指针的背景简介:

      简单点说,this 指针在 C++ 中是一个特殊的指针,指向当前对象的实例并且每一个对象都可以通过 this 指针来访问自己的地址。当然,this 指针是只能在 class, union 或 struct 类型的非静态成员函数中访问的指针。非静态成员函数是没有 this 指针的。还有就是通常来说友元函数没有 this 指针,原因是友元不是类的成员,只有成员函数才有 this 指针。

      我们可以用 this 指针简化我们代码的编写并且可以很方便的调用我们所需的对象。

    2. this 指针的语法表示:

      this 指针的语法表示其实很简单,如下例子:

    this->member

    3. this 指针的一些注意点:

      当对某个对象调用非静态成员函数时,编译器会将该对象的地址作为隐藏的参数传递给函数,即对象的 this 指针实际上不是对象本身的组成部分。假设你用 sizeof 去查看当前的对象,那么 this 指针不会反映在对象的 sizeof 结果中。

    1. date.setTime( 12 );
    2. --> 可以翻译为:
    3. setTime( &date, 12 );

      假设你要使用对象的地址,其中对象的地址还可以从成员函数的内部作为 this 指针提供。this 指针的使用很多时候是隐式的,即可以不用显式的表达出来,通常在引用某个 class 的成员时使用显式的 this 指针是没有必要的。

    1. void date::setTime( uint8_t aTime ) {
    2. // 以下三种表达形式是等同的
    3. time = aTime;
    4. this->time = aTime;
    5. (*this).time = aTime;
    6. }

      有时候我们需要从成员函数中返回当前的对象,可以参考使用 *this,如:

    return *this;

      this 指针还有一个比较不错的属性,即 this 指针可以用于防止自引用:

    1. // 以下代码不会被执行
    2. while ( ¤tObject == this ) {
    3. ......
    4. }

      如果你想要修改 this 指针,比如想对 this 指针进行赋值,那么这是不会被允许的,至少现在的 C++ 版本中是不行的( C++ 早期是实现了这种方法的 )。

    4. this 指针的修饰类型:

      你是可以在函数声明中修改 this 指针类型的,需要使用关键字,例如通过 const 和 volatile。假设需要声明具有某种属性的函数,需要将关键字添加到函数参数列表的后面,例如:

    1. class date {
    2. void setTime() const;
    3. };
    4. // 上述 this 指针被视为指向 const 对象的 const 指针

      成员函数中 this 的类型可以由下面的语法进行相关描述:

    1. [cv-qualifier-list] class-type * const this
    2. // cv-qualifier-list 是由成员函数的声明符确定
    3. // class-type 是当前 class 的名称
    4. // 上面 this 指针是 const 指针且无法重新分配。
    5. // 成员函数声明中使用的 const 或 volatile 限定符适用于由该函数范围中的 this 指针指向的 class 实例
    this 的修饰符
    修饰符                                          语义
    const 无法调用不是 const 的成员函数且无法更改成员数据。
    volatile禁用某些优化且每当访问成员数据时,都会从内存中加载相应数据

    5. this 指针的小结:

      this 指针确实在某些地方可以很大程度减少我们开发项目的负担,但同时使用上稍不注意也会比较容易引入问题,所以在使用的时候需要明确自己的需求和方法,这样才能更好地应用 this 指针。

      构造函数和析构函数不能被声明为 const 或 volatile 类型,但可以在这两种类型的对象上调用。

    6. this 指针参考资源:

     The this pointer - cppreference.com

    千淘万漉虽辛苦,吹尽狂沙始到金。

  • 相关阅读:
    零命令使用git+TortoiseGit工具拉取推送到gitee网站
    oracle库中数据利用datax工具同步至mysql库
    Hadoop系列——Hadoop集群安装day2-1
    web实现usb扫码枪读取二维码数据功能
    Redis未授权访问漏洞复现
    事件处理:SpringBoot+Kafka
    CXP 协议中upconnection 与downconnection的说明及其区别
    2022 CMU15-445 Project 1 Buffer Pool
    二进制安装Docker
    web前端期末大作业:基于HTML+CSS+JavaScript实现网上鲜花店网站设计(14页)
  • 原文地址:https://blog.csdn.net/GOLOJO/article/details/134010081