有了 cfront 之后, 可以看到 member function pointer 是怎么实作的。
void (A::*mf)() = 0;
printf("sizeof(mf): %u\n", sizeof(mf));
这个程式码被转成
typedef int (*__vptp)(void);
struct __mptr {short d; short i; __vptp f; };
struct __mptr __1mf ;
printf ( (const char *)"sizeof(mf): %u\n", sizeof __1mf ) ;
所以这就是为什么这个指标印出来的大小是 16 (64bit 机器), 而不是 8。
cfront 可以为我们揭露大多数 c++ 实作的祕密。