栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ this指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ this指针

今天,我们一起来了解关于this指针的使用。

在C++中,类可以分成变量和函数,它们各自占有一块区域,而所有实例化对象在另一块区域。假如我们定义了同类的多个对象,那么当一个对象去调用该函数时,程序怎么判断此时函数是被哪个对象调用的呢?

这时,程序是用this指针来判断的。

一.this指针使用方式

假设一个名叫color的类,里头有一个打印颜色的函数,和一个字符指针指向的颜色名。

当我们定义多个color对象,假如此时调用对象red的打印函数,在编译时,函数参数里会自动生成一个指向类的指针this指向red。

在函数内部打印字符指针参数时,会自动调用this指针指向的red,让编译器知道这个参数是red对象的。

这样编译器就可以利用this指针来判断此时的函数、参数是哪个对象的了。

我们看看实例:

我们只需要判断this所指向的地址与A的地址是否相符即可。

 此时我们可以得到A的地址。

此时,我们发现在调用打印颜色函数时,this指针指向与A的地址相符。

可以确定,编译器是利用了this指针来确定调用对象的,从而确定该调用哪个实参。

同时,我们也能发现,this指针的类型是类指针类型。 

 二.this指针存储

通常而言this指针是存在栈或寄存器中。这很好理解,存在栈中便于一起与函数调用,存在寄存器中可以提高效率。

我们依旧使用刚才的实例来一探究竟:

这次,我们直接调用打印颜色函数。

 转到反汇编中,我们可以发现,第一个动嘴就是将this指针mov到eax中。而eax就是寄存器的一种。

 

  • “大多数优秀的程序员从事编程工作,不是因为期望获得报酬或得到公众的称赞,而是因为编程是件有趣的事儿。”——林纳斯·托瓦兹(Linus Torvalds)

如有错误,敬请斧正 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019442.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号