在Mozilla Developer Style Guide的 C / C ++实践 下,可以找到,
测试指针时,使用(!myPtr)或(myPtr);不要使用myPtr!= nsnull或myPtr == nsnull。
这背后有原因吗?或者只是一个惯例?
答案 0 :(得分:2)
一般而言,公司编码指南就是这样 - 预计将在该公司内部执行的准则。
这是一个偏好问题 - 它们都实现了同样的事情(假设myPtr
是指针*),所以它纯粹是主观的。对于大型代码库,在一半的位置看到if (myPtr)
而在另一半看到if (myPtr != NULL)
会很烦人。
*如果myPtr
是非指针用户定义的类型,它可以重载运算符!
,!=
和==
,这样它们实际上可能会表现出来不同子>
答案 1 :(得分:1)
如果你这样做,就有可能犯一个很难找到的印刷错误
if (myPtr = nsnull) /* assignment operator */
虽然你真的是这个意思
if (myPtr == nsnull) /* test equality */
答案 2 :(得分:0)
这背后有原因吗?
存在公司编码指南,因为在大型公司中,通常会有人将审美一致性置于其他编程问题之上。它们将产生大量毫无意义的指导原则,例如这一指南,虚假的理由是无关细节的一致性使代码更具可读性。如果企业环境功能失调,这些指导方针将被载入官方政策文件并强加给所有开发人员。
或者只是一个惯例?
在这种情况下,最好不要使用一些非常规符号,这些符号可能会或可能不会评估为空指针值;虽然大概nsnull
被这种风格指南定义并强制要求使用,因此内部人员会明白这一含义。 if (ptr)
是否比更传统的if (ptr != 0)
(或NULL
或nullptr
更好)是一个品味问题:有些人会因为他们的选择而战斗圣战,其他人会赢得'关心。
答案 3 :(得分:0)
样式指南推荐的样式有一个名称:boolean zen。这是布尔表达式的本质。练习boolean zen意味着以尽可能最简单的形式编写布尔表达式。例如,这不是布尔禅:
bool foo() {
if(myCondition()) {
return true;
} else {
return false;
}
}
用布尔禅重写,你得到这个:
bool foo() {
return myCondition();
}
我相信很容易看到第二个更令人满意,只是因为它没有添加不必要的代码结构。
现在,在C派生中,如果在布尔上下文中使用,每个整数/指针也有一个已定义的行为。手动进行转换毫无意义。 I. e。在C / C ++ / Objective-C中if语句
bool foo = ...;
if(foo) printf("It's true");
if(foo != false) printf("It's really true");
与行
等同Bar* foo = ...;
if(foo) printf("It exists");
if(foo != 0) printf("It really exists");
所以,根据boolean zen,你应该坚持使用更简单的一种。
您可以在此slide-deck中找到boolean zen的介绍。