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