this指针到底存放到哪里

那么C++中类成员函数是如何知道哪一个对象调用了它?并正确显示调用它的对象的数据呢?

当一个对象调用某成员函数时会隐式传入一个参数, 这个参数就是this指针。this指针中存放的就是这个对象的首地址。
这和C中经过向函数传递结构体变量的地址是否是很像?只是传参形式不同罢了! 在C中咱们是手工把结构体变量和函数关联起来的,而C++则是编译器帮咱们把类数据和成员函数关联起来的并经过名称粉碎和编译时检查等形式防止外部的任意访问。web

那么这个this指针存放在哪里呢?

其实编译器在生成程序时加入了获取对象首地址的相关代码。并把获取的首地址存放在了寄存器ECX中(VC++编译器是放在ECX中,其它编译器有可能不一样)。也就是成员函数的其它参数正常都是存放在栈中。而this指针参数则是存放在寄存器中。
类的静态成员函数由于没有this指针这个参数,因此类的静态成员函数也就没法调用类的非静态成员变量。svg