小编典典

您在 C++ 中使用 NULL 或 0(零)作为指针吗?

all

在 C++ 的早期,当它被固定在 C 之上时,您不能使用 NULL,因为它被定义为(void*)0. 您不能将 NULL 分配给除
之外的任何指针void*,这使得它毫无用处。在那些日子里,人们普遍认为您使用0(零)作为空指针。

时至今日,我继续使用零作为空指针,但我周围的人坚持使用NULL. NULL我个人认为将名称 ( ) 赋予现有值没有任何好处-
因为我也喜欢将指针测试为真值:

if (p && !q)
  do_something();

然后使用零更有意义(如果你使用NULL,你不能在逻辑上使用p && !q-
你需要明确比较NULL,除非你假设NULL为零,在这种情况下为什么使用NULL)。

是否有任何客观理由更喜欢零而不是 NULL(反之亦然),或者只是个人喜好?

编辑:我应该添加(并且最初是说)对于 RAII 和异常,我很少使用零/NULL 指针,但有时您仍然需要它们。


阅读 71

收藏
2022-07-01

共1个答案

小编典典

这是 Stroustrup 对此的看法:C++
风格和技术常见问题解答

在 C++ 中, 的定义NULL是 0,所以只有审美上的区别。我更喜欢避免使用宏,所以我使用 0。另一个问题NULL是人们有时错误地认为它不同于
0 和/或不是整数。在准标准代码中,NULL有时被定义为不合适的东西,因此必须/必须避免。这几天不太常见了。

如果必须命名空指针,请调用它nullptr;这就是它在 C++11 中的名称。然后,nullptr将是一个关键字。

也就是说,不要为小事出汗。

2022-07-01