现在的位置: 首页 > 算法 > 正文

C++中this指针和__thiscall的调用方式是什么

2020年01月13日 算法 ⁄ 共 855字 ⁄ 字号 评论关闭

  一、为什么会产生this指针?

  我们可以从上边代码看出,定义了三个对象t1,t2,t3再调用时他们是如何区分自身的height,width,length这时候就需要他们各自的this指针来完成。在调用时系统会把对象t1的起始地址赋给this指针,于是在成员函数引用数据成员时,就按照this的指向找到各自对应的数据成员。(这里可以从反汇编中更好的理解)

  由此,我们得出结论 : 将全局的函数放进结构体内,便出现了this指针,该this指针是由ecx传递的 . 更重要的是这是编译器替我们加上的.

  即是说,由C转化为C++,更多的是编译器做的操作.

  可以归纳this指针的本质 :

  this是调用结构体(或类)内部成员函数时传递的参数(通常用ecx传递) . 其本质是结构体变量(或者对象)的第一个成员变量的地址.

  二、this指针的特点

  this指针的类型:类类型*const

  this指针的地址寄存在ecx中

  this指针并不是对象本身的一部分,不影响sizeof的结果

  this的作用域在类“成员函数”的内部

  this指针是类“成员函数”的第一个默认隐含参数,编译器自动维护传递,类编写者不能显式传递

  只有在类的非静态成员函数中才可以使用this指针,其他任何函数都不允许

  this指针不可以++ - -操作 , 即this指针的值不可以被改变 .

  .参数个数确定的函数,this指针是由ecx传递的 , 在变参函数中最后一个传递的参数是this指针

  三、__thiscall的调用方式

  参数的传递顺序:从右向左

  参数的传递方式:是利用栈传递

  堆栈平衡:调用者平衡堆栈(外平栈)

  __thiscall只能够用在类的成员函数上

  如果参数个数确定,this指针通过ecx传递给被调用者;如果参数不确定,this指针在所有参数被压栈后压入栈堆

  对参数个数不确定的,调用者清理堆栈,否则函数自己清理堆栈

  以上就是this指针和__thiscall的调用方式的全部内容,想了解更多请关注学步园。

抱歉!评论已关闭.