メンバ関数へのポインタ
問題です。以下の C++ のコードがどのくらいの数値を出力するかどうかを予想して、実際に確かめてみて下さい。
#include <stdio.h> struct C { void f() {} virtual void vf() {} }; int main() { printf("%p\n", &C::f); printf("%p\n", &C::vf); }
まぁうちだと 0x804847c, 0x1 だったわけですが、要は仮想関数の場合、関数ポインタじゃなくて仮想関数テーブル内のインデックスを保持するわけ。これが Java だとか C++ だとかで、 sumimさんのメンタルモデルが裏切られた 理由なわけですが、通常これはありがたいわけです。これが無いとまともな mem_fun は書けません。