this 到底是什么
this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this。不过 this 这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。
https://blog.csdn.net/qq_38576022/article/details/97170077
- 先了解下各种调用约定一般的方式, 这个只是约定, 部分细节不同编译器是不一样的, 如VS2010/32
调用方式 参数 栈恢复
__fastcall ecx,edx,esp n
__stdcall esp 0
__cdecl esp n
__stdcall(class) ecx,esp n
__cdecl(class) ecx,esp 0
__fastcall(class) ecx,edx,esp n
如果用其他编译器, 这些是不一样的
x64的汇编一般只有一种 fastcall
- this只是一个指向对象的指针, 在代码中实际是无法严格判断一个函数是否是类成员函数, 还是普通函数
比如 class A
int A::fun1() return 1;
int fastcall fun2(class A *obj) return 2;
fun1 和 fun2的结构是一样的, ecx都是一个对象的指针, 但是无法判断是否是类成员函数, 也就是this
参考链接
C++成员函数 this指针 调用约定_陆业聪的博客-CSDN博客
摘要:介绍了如何取成员函数的地址以及调用该地址.关键字:C++成员函数 this指针 调用约定一、成员函数指针的用法 在C++中,成员函数的指针是个比较特殊的东西。对普通的函数指针来说,可以视为一个地址,在需要的时候可以任意转换并直接调用。但对成员函数来说,常规类型转换是通不过编译的,调用的时候也必须采用特殊的语法。C++专门为成员指针准备了三个运算符: "::*"用于指针的声明,而
https://blog.csdn.net/mba16c35/article/details/12362077?ops_request_misc=&request_id=&biz_id=102&utm_term=C++%E5%8F%8D%E6%B1%87%E7%BC%96%E7%B1%BB%E7%9A%84this%E6%8C%87%E9%92%88%EF%BC%8C%E6%80%8E%E4%B9%88%E5%8C%BA%E5%88%86%E5%90%84%E7%A7%8D%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E7%BA%A6%E5%AE%9A%E6%9D%A5%E7%A1%AE%E5%AE%9A&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-0-12362077.nonecase&spm=1018.2226.3001.4450