我们平常写程序时习惯使用NULL或者0作为空指针,而且已经是习以为常了。
今天在处理一个pointer to member指针时发现返回值为0下意识的以为返回的是个空指针,但是发现确进入了下面的if语句。
然后研究了下编译出来的代码,发现空指针值被换成了0xffffffff,因为pointer to member是可能为0的。
联想到其他平台有可能空指针实际上不是0的情况,现在实际上x86平台也有不是0的空指针了。
这倒是我孤陋寡闻了。
编译器会将程序中的指针判断识别出来并且正确的转换为操作,即使你使用NULL或者0作为判断甚至if(指针)的形式都是可以正确转换的。
虽然这样,但是如果你使用类似"*(void **)&"这种强制的进行指针的强制转换编译器就爱莫能助了,只能是悲剧的产生。