【问题标题】:Coding standards for comparing pointer to NULL [closed]将指针与 NULL 进行比较的编码标准 [关闭]
【发布时间】:2013-09-09 08:22:41
【问题描述】:

是否有任何关于什么比较的编码指南:

if (ptr != nullptr) ...

或

if (ptr) ...

在 C++(11) 中更好吗?

这个问题不是C: Comparison to NULL的重复,后者据说这些形式在C中是等价的。

这个问题都不是基于选项的:我不是问你更喜欢什么,而是问是否有任何编码标准或指南,告诉你喜欢一种或另一种形式。

【问题讨论】:

  • 所以你是在征求代码指南作者的意见,而不是我们的?
  • 或者更准确地说,指南是正式的意见。 =P
  • 没有官方的通用 C++ 编码标准,因此无法回答您的问题。可以为Sutter/Alexandrescu、GCC、Root、Geosoft、Google 回答...但不是普遍的。
  • 如果您要求指南, 那么它是基于意见的 :-) 这就是指南的意思,指南而不是平面-排除规则。甚至编码“标准”实际上也是 ISO 标准上下文中的指南,它允许您按照自己的意愿编写代码,只要它符合。
  • 除非使用谁的指南是见仁见智...

标签: c++ pointers c++11 coding-style null


【解决方案1】:

我见过的每条编码准则都坚持

if ( ptr != nullptr )

或

if ( ptr != NULL )

在 C++11 之前的版本中,这是常见的情况。使用 0 而不是 NULL也很普遍,可以考虑选择 风格问题(在某种意义上,有一个有效的论点 两种观点)。

一般来说,编码指南倾向于避免隐式转换 (无损转换可能除外,例如 int 到 double),因为它们使代码更难阅读。

另一方面,编码指南无法避免无处不在 成语(不是这里的情况),所以一般会接受 将流隐式转换为可以充当的类型 一个布尔值。 (这里的部分动机可能是事实 程序员想出的替代方案是 一般是错误的。比隐式转换更好 没有的代码。)

【讨论】:

    【解决方案2】:

    正如我在 c++11 标准中正确理解的那样,nullptr 没有作为数值处理,所以它不是 0,因为 C 中的 NULL 定义是。它更多地只是 NULL 以自己的方式,不会被视为数字 0,主要是为了避免与模板不匹配。

    所以可能更喜欢要求

    if (ptr != nullptr) ...作为

    nullptr 无论如何都不会被称为 NULL。

    【讨论】:

    • nullptr 无论如何都不会被称为 NULL - 你是什么意思?
    • 我想说,nullptr 相当于 vba 中的“Nothing”。就我对 vba 的了解而言,我们在 C 中所知道的 NULL 有什么不同。所以 nullptr 和 NULL 不一样。并且 nullptr 不会像 NULL 的定义那样被解释为数字 0。还是我错了?
    • 不,nullptr 不会被视为数字 0。
    • 那么为什么要投反对票呢?这正是我所说的。
    • 也许你在某处忘记了一个“不”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2022-11-03
    • 2013-05-04
    相关资源
    最近更新 更多