今天,我们一起来了解关于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)
如有错误,敬请斧正