为了账号安全,请及时绑定邮箱和手机立即绑定

对C ++中的指针使用NULL或0(零)吗?

对C ++中的指针使用NULL或0(零)吗?

C++
皈依舞 2019-07-23 19:11:06
对C ++中的指针使用NULL或0(零)吗?在C ++的早期,当它被用螺栓固定在C之上时,你不能使用NULL,因为它被定义为(void*)0。你不能将NULL分配给除了之外的任何指针void*,这使得它变得毫无用处。在那些日子里,人们接受了你使用0(零)空指针。直到今天,我继续使用零作为空指针,但我周围的人坚持使用NULL。我个人认为给NULL现有值的名称()没有任何好处- 因为我也喜欢将指针测试为真值:if (p && !q)   do_something();然后使用零更有意义(如果你使用NULL,你不能逻辑使用p && !q- 你需要明确比较NULL,除非你假设NULL是零,在这种情况下为什么使用NULL)。有没有客观的理由偏好零而不是NULL(反之亦然),或者只是个人偏好?编辑:我应该添加(并且最初要说)使用RAII和异常,我很少使用零/ NULL指针,但有时你确实需要它们。
查看完整描述

3 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

有一些论点(其中一个是相对较新的),我认为这与Bjarne的立场相矛盾。

  1. 意图文件

使用NULL允许搜索它的使用,它还强调开发人员想要使用NULL指针,无论编译器是否正在解释它NULL

  1. 指针和'int'的重载相对较少

每个人引用的例子是:

void foo(int*);void foo (int);void bar() {
  foo (NULL);  // Calls 'foo(int)'}

但是,至少在我看来,上面的问题并不是我们对空指针常量使用NULL,而是我们有'foo'的重载,它们采用了不同类型的参数。参数也必须是一个int,因为任何其他类型都会导致模糊调用,因此生成一个有用的编译器警告。

  1. 分析工具可以帮助今天!

即使在没有C ++ 0x的情况下,现在还有一些工具可以验证是否NULL用于指针,并且0用于整数类型。

  1. C ++ 11将有一个新std::nullptr_t类型。

这是该表的最新参数。C ++ 0x 的问题0NULL正在积极解决,你可以保证,对于提供的每个实现NULL,他们将要做的第一件事是:

#define NULL  nullptr

对于那些谁使用NULL,而不是0,这种变化将在很少或根本没有力气类型安全性的提高-如果有的话,还可以赶上他们已经使用了一些错误NULL0。对于0今天使用的任何人......呃......希望他们对正则表达有很好的了解......


查看完整回答
反对 回复 2019-07-23
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

我很久以前就停止使用NULL(和大多数其他宏一样)。我这样做不仅是因为我想尽可能地避免使用宏,而且因为NULL似乎已经在C和C ++代码中被过度使用了。它似乎只在需要0值时使用,而不仅仅是指针。

在新项目中,我将其放在项目标题中:

static const int nullptr = 0;

现在,当符合C ++ 0x的编译器到达时,我所要做的就是删除该行。这样做的一个很好的好处是Visual Studio已经将nullptr识别为关键字并适当地突出显示它。


查看完整回答
反对 回复 2019-07-23
  • 3 回答
  • 0 关注
  • 673 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信