C++ ではなぜ null ポインターを介してメソッドを呼び出すと「機能」するのでしょうか? [重複] 質問する

C++ ではなぜ null ポインターを介してメソッドを呼び出すと「機能」するのでしょうか? [重複] 質問する

重複の可能性あり:
NULLクラスポインタを介してクラスメソッドを呼び出す

#include <iostream>
using namespace std;
class test
{
    int i;
public:
    test():i(0){ cout << "ctor called" << endl;}
    void show()
    {
        cout<<"show fun called"<<endl;
    }
};

int main(int argc , char *argv[])
{
    test *ptr = NULL;
    ptr->show();
    return 0;
}

明らかに、ctor は呼び出されません。これは標準ですか? それとも、このポインターは show() メンバー関数では使用されないというコンパイラの最適化ですか?

ベストアンサー1

メソッドを呼び出すのにポインタは必要ありません。ポインタの型はわかっているので、メソッドのコードもわかっています。メソッドは を使用しないのでthis、コードは問題なく実行されます。これは未定義の動作ですが、ポインタが NULL かどうかをチェックしない方が効率的なので、実行されます。

おすすめ記事