再一次面试中,被问到,函数调用时是怎么知道对象的成员信息的,用vs调试了一把:
#include "stdafx.h"
#include <string>
#include <iostream>
class A{
public:
void test(){
std::cout << "test : " << num2 << std::endl;
}
private:
int num = 3;
int num2 = 5;
};
int main(int argc, char* argv[])
{
A a;
a.test();
return 0;
}
结论:ecx 携带 this指针进栈,通过ecx (dword ptr [this])+ 偏移量获取成员变量