此C ++代码适用于我的平台和编译器(Windows,GCC 4.7):
#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?
答案 0 :(得分:5)
不,那不行。任何取消引用NULL指针都是未定义的行为。它恰好起作用,因为它不是虚拟功能(因此没有跳过对象的vtable),但这并不是做你所做的事情的借口做。