2012-01-23 4 views
6

可能性の重複:
What will happen when I call a member function on a NULL object pointer?オブジェクトインスタンスなしでnonstatic member-functionを呼び出すことはなぜ可能ですか?

まあ、私はこのコードとプログラム出力はそれを自己説明だと思う:

#include <iostream> 
#include <string> 
using namespace std; 

class Test 
{ 
public: 
    void Not_Static(string args) 
    { 
     cout << args << endl; 
    } 
}; 

int main() 
{ 
    Test* Not_An_instance = nullptr; 
    Not_An_instance->Not_Static("Non-static function called with no object?"); 
    cin.ignore(); 
    return 0; 
} 

プログラム出力:

0を

非静的関数がオブジェクトなしで呼び出されましたか?

なぜ可能ですか?

+5

これは未定義の動作なので、何かが起こる可能性があります。 –

+0

@FredLarsonは、実際には、実際にはなぜそれが可能か説明しません。 –

+0

顔で自分を撃ってしまうのを止めるのはC++の仕事ではないので可能です。 –

答えて

9

未定義の動作。あなたのプログラムは、NULLポインタ上でメソッドを呼び出すことによって未定義の動作を呼び出すので、出力を含めてがすべて許可されます。

注意:C++言語の仕様では、最適化の余地を残すためにすべてのプログラムの出力を指定していません。多くのことは明示的にチェックされず、不正確または非論理的に見える動作につながる可能性がありますが、単に指定されていません。

2

thisを使用していないため、ヌルポインタを逆参照しません。仮想化すると失敗する可能性があります。

5

この動作は定義されていません。その出力が可能です。 問題は未定義の動作で簡単に噛むことができるので、このようなことはしないでください。

関連する問題