在c++的早期,当它被固定在C之上时,你不能使用NULL,因为它被定义为(void*)0
。你不能将NULL赋值给除void*
之外的任何指针,这使得它有点无用。在过去,使用0
(zero)作为空指针是被接受的。
直到今天,我仍然使用0作为空指针,但我周围的人坚持使用NULL
。我个人认为给现有值命名(NULL
)没有任何好处-因为我也喜欢将指针作为真值测试:
if (p && !q)
do_something();
那么使用0就更有意义了(比如如果你使用NULL
,你就不能在逻辑上使用p && !q
——你需要显式地与NULL
进行比较,除非你假设NULL
为零,在这种情况下为什么要使用NULL
)。
是否有任何客观的原因让人们更喜欢0而不是NULL(反之亦然),或者这只是个人偏好?
编辑:我应该补充(最初的意思是说),对于RAII和异常,我很少使用零/NULL指针,但有时你仍然需要它们。