C++中this指针的本质

C++中this指针的本质一直以来对C++中的this不理解,只知道在构造函数中,如果构造函数的参数和类成员的名字一样的话,就可以用this指针来区分,如:this->a=a;一直以来都有这个疑问:this究竟是什么?我们明明没有定义这个this,但是我们可以直接用而编译器不会报错。今天来解决这个疑问。从刚才的代码中,我们用”this->”而不是”this.”就说明this是一个指针,而我们知道,在C、C++中,指针

大家好,又见面了,我是你们的朋友全栈君。

一直以来对C++中的this不理解,只知道在构造函数中,如果构造函数的参数和类成员的名字一样的话,就可以用this指针来区分,如:

this->a = a;

一直以来都有这个疑问:this究竟是什么?我们明明没有定义这个this,但是我们可以直接用而编译器不会报错。今天来解决这个疑问。
从刚才的代码中,我们用”this->”而不是”this.”就说明this是一个指针,而我们知道,在C、C++中,指针就是地址,因此很容易想到,this也是一个地址。但是问题来了,this是谁的地址呢?我们看下面这个很简单的C++程序:

#include <iostream>

class A
{
public:
    A();

};

A::A()
{
    std::cout << "this " << this << std::endl;
}

int main()
{
    A a;
    std::cout << "&a " << &a << std::endl; 

    return 0;
}

大家先在自己的脑袋中运行一下这个程序,然后看自己运行的结果与下面的是不是一样。
这里写图片描述

我们可以看到,this和&a的结果是一样的。由此可以看出,this就是a的地址,而a是类A的一个对象,占用了sizeof(A)的内存空间。

执行到A a这一句的时候,其实就生成了类A的一个对象,并同时为这个对象分配了sizeof(A)的内存空间,其实这个时候this也生成了,this就指向了这段内存空间,如下图所示:
这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145807.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Java中的native修饰符

    Java中的native修饰符今天偶然看代码,发现别人有这样写的方法,并且jar里面有几个dll文件,比较奇怪,于是把代码打开,发现如下写法。public native String GSMModemSMSReadAll(String s, int i);public native String GSMModemGetErrorMsg(String s);public native boolean GSMModemI…

  • ubuntu 设置samba 精要说明

    ubuntu 设置samba 精要说明

  • 绝句。。。。

    绝句。。。。

  • Hibernate annotation多对多配置

    Hibernate annotation多对多配置

  • virsh 关机_KVM virsh常用命令篇「建议收藏」

    virsh 关机_KVM virsh常用命令篇「建议收藏」1、查看运行的虚拟机virshlist2、查看所有的虚拟机(关闭和运行的虚拟机)virshlist–all3、连接虚拟机virshconsole+域名(虚拟机的名称)4、退出虚拟机ctrl+]5、关闭虚拟机5.1、virshshutdown+域名这个时候我在virshlist发现test02这个虚拟机还是在运行的,并没有关闭。我们需要安装一个acpid的服务并启动它,什么是AC…

  • 斗地主老是输?一起用Python做个AI出牌器![通俗易懂]

    斗地主老是输?一起用Python做个AI出牌器![通俗易懂]前言最近在网上看到一个有意思的开源项目,快手团队开发的开源AI斗地主——DouZero。今天我们就一起来学习制作一个基于DouZero的斗地主出牌器,看看AI是如何来帮助我们斗地主的吧!首先一起来看看AI出牌器的效果:下面,我们开始介绍这个AI出牌器的制作过程。一、核心功能设计首先我们这款出牌器是基于DouZero开发的,核心是需要利用训练好的AI模型来帮住我们,给出最优出牌方案。其次关于出牌器,先要需要确认一个AI出牌角色,代表我们玩家自己。我们只要给这个A

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号