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就指向了这段内存空间,如下图所示:
这里写图片描述

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Azure和.NET Core成就天作之合

    Azure和.NET Core成就天作之合

    2022年4月2日
    42
  • 公司的报表工具太难用,我三天撸了个Excel工具,运营小姐姐直呼太好用了,现已开源!!(建议收藏)

    公司的报表工具太难用,我三天撸了个Excel工具,运营小姐姐直呼太好用了,现已开源!!(建议收藏)冰河手把手教你撸Excel报表工具,俘获运营小姐姐的心,一起加油,搞起来!!冰河强烈建议收藏!!

    2022年6月28日
    25
  • Shell脚本调用阿里云API实现DDNS动态域名解析[通俗易懂]

    Shell脚本调用阿里云API实现DDNS动态域名解析[通俗易懂]由于服务器的外网是动态拨号,每次获取的外网IP都不同。手头上刚好有阿里云的域名。为此,想通过编写一个Shell脚本,定期通过互联网服务获取当前机器所在网络的IP地址,并将新的IP地址通过阿里云提供的API,更新到对应的域名解析记录。申请AccessKey登陆阿里云官网,在控制台的右上角,将鼠标移动到头像上,会出现如下列表:选择AccessKey管理,会弹出如下提示:选择开始使用子用户Access

    2022年5月22日
    54
  • 从零开始安装VMwareTools的详细步骤[通俗易懂]

    从零开始安装VMwareTools的详细步骤[通俗易懂]从零开始安装VMwareToolsVMwareTools是VMware虚拟机中自带的一种工具,相当于VirtualBox中的增强功能(SunVirtualBoxGuestAdditions),是VMware提供的增强虚拟显卡和硬盘性能、以及同步虚拟机与主机时钟的驱动程序。它的功效不仅仅如此,我们可以通过它进行虚拟机和物理机之间的文件传输的,前提是我们要先安装它。那到底怎么安装VMware…

    2022年5月26日
    73
  • shell编程之if语句[通俗易懂]

    shell编程之if语句[通俗易懂]shell编程之if判断[TOC]1.整数比较2.字符串比较3.举例1.数字比较2.字符串比较4.Other

    2022年7月2日
    32
  • CAN总线详解

    1、简介CAN是控制器局域网络(ControllerAreaNetwork,CAN)的简称,是一种能够实现分布式实时控制的串行通信网络。优点:传输速度最高到1Mbps,通信距离最远到10km,无损位仲裁机制,多主结构。近些年来,CAN控制器价格越来越低。Ø低成本:ECUs通过单个CAN接口进行通信,布线成本低。Ø高集成:CAN总线系统允许在所有ECUs上进行集中错误诊…

    2022年4月6日
    81

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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