为什么C++中的成员函数,不用传参就能访问类中成员?
因为编译器为它传递了一个this指针, 从我们自己写的代码的角度是完全看不出的;
成员函数的调用约定为__fastcall:
通过汇编可看出:
obj.funL();
00B81446 lea ecx,[obj] //把当前的对象的地址(即this指针)给ecx,通过ecx传递给函数内部
00B81449 call CA::funL (0B81212h)
002D152C push ecx
002D152D lea edi,[ebp-0CCh]
002D1533 mov ecx,33h
002D1538 mov eax,0CCCCCCCCh
002D153D rep stos dword ptr es:[edi]
002D153F pop ecx
002D1540 mov dword ptr [ebp-8],ecx //函数内部得到this指针对象
这使得我们在创建线程回调函数的时候造成了不必要麻烦, 如果把不让编译器传递this指针就OK!(我用的方法是把回调函数做成staic函数)。