是否有任何关于比较的编码指南:
if (ptr != nullptr) ...
或
if (ptr) ...
C++(11)更好吗?
这个问题不是 C 的重复:与 NULL 的比较,在后者中,据说这些形式在 C 中是等价的。
这个问题也不是基于opitit:我不是在问你更喜欢什么,而是问是否有任何编码标准或指南,告诉你更喜欢一种或另一种形式。
我见过的每一个编码指南都坚持
if ( ptr != nullptr )
或
if ( ptr != NULL )
在 C++11 之前,这是通常的情况。 使用 0
而不是 NULL
也很普遍,可以考虑选择风格问题(从某种意义上说,有一个有效的论点对于这两种观点)。
通常,编码准则倾向于避免隐式转换(非有损转换可能除外,例如 int
double
),因为它们使代码更难阅读。
另一方面,编码指南无法避免无处不在习语(这里不是这种情况),所以通常会接受将流隐式转换为可充当的类型一个布尔值。 (这里的部分动机可能是事实程序员想出的替代方案是一般是错误的。 比有效的隐式转换更好没有的代码。
正如我在 c++11 中正确处理的那样,nullptr 不作为数值处理,因此它不像 C 中的 NULL 定义那样0
。它更像是 NULL 以自己的方式,不会被视为数字0
,主要是为了避免与模板不匹配。
所以可能更可取的是要求
if (ptr != nullptr) ...
作为
nullptr
不会以任何方式称为 NULL。