2003/09/19 - C++の裏?仕様

松4氏が書いたC++コード。ちょっと変えてあるけど。

class A
{
public:
    void f();
};

void A::f()
{
    std::cout << "hello." << std::endl;
}

int main()
{
    A a = NULL;
    a->f();

 return 0;
}

一見 NULL Pointer Exception が発生しそうだが,VC でも GCC でも BCC でも通る。アセンブリレベルで見ると絶対アドレスで関数を呼んでいる。なので仮想関数だったりするとアウト。コンパイラ依存ぽいけど。

コメントする