メンバ関数へのポインタ

問題です。以下の 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 は書けません。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h