下面这个例子,读起来可能有些晦涩,但是读懂了对于理解C++的函数调用约定、函数指针、动态绑定、虚函数表 和 多态机制有极大的帮助。
测试环境:Windows+vs,Linux+GCC
成员函数在Windows下的默认的函数调用约定为__thiscall,这种约定会把this指针的值直接放到寄存器ECX中,而不是将其入参数栈。当采用常规的成员函数调用方式的时候,ECX会被填入正确的this值,但是我们通过普通的函数指针来调用成员函数的时候,ECX的值是未知的,故此采用__cdecl方式来将其编译。
#include <iostream>
class Base {
public:
Base() { s