2014-06-25 164 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:实际上,没有成员访问,它几乎没有。 –

相关问题