当前位置: 首页 > news >正文

C++:this指针

class date
{
public:void f(int i){}
}

以上是我们定义的一个简单的类,这个类里面含有一个简单的成员函数,成员函数看似只有一个参数,实际上是两个参数,除了参数i以外,还有一个指向调用该函数的对象的指针——this指针。

在实际上,编译器会把这段代码改造成这样:

class date
{
public:void f(date*this,int i){}
}

其他面向对象的语言也会这样做,不过可能不是指针,而是引用。

那么我们实际调用的时候是怎么样的呢?

date i;
i.f(9);

这一段代码,在经过编译器的解释之后,就会变成这样:

date i;
i.f(&i,9);

会把对象的地址一起传过去,这样才会方便成员函数调用对象里面的成员。

不过需要注意的是,我们在定义成员函数时,写有哪些参数的时候不能自己来写这个this指针,

//这是错误写法
void f(date*this,...)
{
}

不过我们可以在函数内部显示地调用

class date
{
public:void f(int i){this->成员...}
}

不过调用对象的成员时,你自己不显式地调用,编译器会帮你补充的,所以以上的代码等于:

class date
{
public:void f(int i){成员...}
}

this指针严格来说是这样写的:

class date
{
public:void f(date*const this,int i){this->成员...}
}

这里的const修饰的是指针本身,而不是指针指向的内容。

this其实是一个关键字,this指针其实是一个形参,一般存储在栈帧里面,不过vs底下是用ecx寄存器传递的。

相关文章:

  • 编译后的js文件如何跟进调试
  • 研发效率破局之道阅读总结(5)管理文化
  • AtCoder AT_abc405_d ABC405D - Escape Route
  • 使用FastAPI和React以及MongoDB构建全栈Web应用03 全栈开发快速入门
  • 每日脚本学习5.10 - XOR脚本
  • 论敏捷软件开发及其应用
  • 关于web3
  • PyTorch API 2 - 混合精度、微分、cpu、cuda、可视化
  • 模拟太阳系(C#编写的maui跨平台项目源码)
  • Maven 插件配置分层架构深度解析
  • 3.优惠券秒杀
  • 8051模板移植
  • 深度学习篇---姿态检测实现
  • VSCode-插件:codegeex:ai coding assistant / 清华智普 AI 插件
  • 【计算机视觉】3DDFA_V2中表情与姿态解耦及多任务平衡机制深度解析
  • OpenLayers 精确经过三个点的曲线绘制
  • 学习黑客5 分钟深入浅出理解Linux进程管理
  • HDFS 常用基础命令详解——快速上手分布式文件系统
  • 巡检机器人数据处理技术的创新与实践
  • uniapp+vue3+firstUI时间轴 提现进度样式
  • 国内大模型人才大战打响!大厂各出奇招
  • 李在明正式登记参选下届韩国总统
  • 习近平会见古共中央第一书记、古巴国家主席迪亚斯-卡内尔
  • 2025年上海市模范集体、劳动模范和先进工作者名单揭晓
  • “一嗨租车”陷“五年后扣费”疑云,用户:违章处理莫名消失
  • 欧盟公布对美关税反制清单,瞄准美国飞机等产品