在 C++ 的早期,当它被固定在 C 之上时,您不能使用 NULL,因为它被定义为(void*)0. 您不能将 NULL 分配给除 之外的任何指针void*,这使得它毫无用处。在那些日子里,人们普遍认为您使用0(零)作为空指针。
(void*)0
void*
0
时至今日,我继续使用零作为空指针,但我周围的人坚持使用NULL. NULL我个人认为将名称 ( ) 赋予现有值没有任何好处- 因为我也喜欢将指针测试为真值:
NULL
if (p && !q) do_something();
然后使用零更有意义(如果你使用NULL,你不能在逻辑上使用p && !q- 你需要明确比较NULL,除非你假设NULL为零,在这种情况下为什么使用NULL)。
p && !q
是否有任何客观理由更喜欢零而不是 NULL(反之亦然),或者只是个人喜好?
编辑:我应该添加(并且最初是说)对于 RAII 和异常,我很少使用零/NULL 指针,但有时您仍然需要它们。
这是 Stroustrup 对此的看法:C++ 风格和技术常见问题解答
在 C++ 中, 的定义NULL是 0,所以只有审美上的区别。我更喜欢避免使用宏,所以我使用 0。另一个问题NULL是人们有时错误地认为它不同于 0 和/或不是整数。在准标准代码中,NULL有时被定义为不合适的东西,因此必须/必须避免。这几天不太常见了。 如果必须命名空指针,请调用它nullptr;这就是它在 C++11 中的名称。然后,nullptr将是一个关键字。
在 C++ 中, 的定义NULL是 0,所以只有审美上的区别。我更喜欢避免使用宏,所以我使用 0。另一个问题NULL是人们有时错误地认为它不同于 0 和/或不是整数。在准标准代码中,NULL有时被定义为不合适的东西,因此必须/必须避免。这几天不太常见了。
如果必须命名空指针,请调用它nullptr;这就是它在 C++11 中的名称。然后,nullptr将是一个关键字。
nullptr
也就是说,不要为小事出汗。