2014-06-25 128 views
-4

此C++代碼的工作爲我的平臺和編譯器(Windows中,GCC 4.7):在類的NULL指針實例上調用方法可以嗎?

#include <stdio.h> 

class A { 
public: 

    /* ... */ 

    int size() const 
    { 
     if (this == NULL) { 
      return 0; 
     } 
     return m_size; 
    } 

private: 
    int m_size; 
}; 

int main() 
{ 
    A* a = NULL; 

    printf("%d\n", a->size()); 
} 

但就是這個代碼有效的標準C++和便攜式? 方法接受這個== NULL是否正確?

+5

不,不行。!!!!!! – billz

+1

這是未定義的行爲 – Banex

+0

我沒有閱讀標準,但我無法想象的東西說:「可以從空變量調用方法」。 – Unda

回答

5

不,那不好。任何對NULL指針的解引用都是未定義的行爲。它恰好工作,因爲它不是一個虛擬函數(因此沒有跳過對象的vtable),但這不是做你正在做的事情的藉口。

+1

實際上它比這更復雜一點,但最終的結果是 - 至少暫時 - 我們可以或多或少地得出結論:它可能是UB。 –

+0

它不需要是虛擬的崩潰和燃燒。 –

+0

@CatPlusPlus:實際上,沒有成員訪問,它幾乎沒有。 –

相關問題