在Mozilla Developer Style Guide的C/C++ Practices下,可以找到:
测试指针时,使用 (!myPtr) 或 (myPtr);不要使用 myPtr != nsnull 或 myPtr == nsnull。
这背后有什么原因吗?或者它只是一个约定?
在Mozilla Developer Style Guide的C/C++ Practices下,可以找到:
测试指针时,使用 (!myPtr) 或 (myPtr);不要使用 myPtr != nsnull 或 myPtr == nsnull。
这背后有什么原因吗?或者它只是一个约定?
一般来说,公司编码指南就是这样 - 预计将在该公司内部执行的指南。
这是一个偏好问题——它们都实现了相同的目标(假设myPtr
是指针*),所以这纯粹是主观的。对于大型代码库,看到if (myPtr)
一半的地方和if (myPtr != NULL)
另一半的地方很烦人。
*如果myPtr
是非指针用户定义类型,它可以重载运算符!
,!=
因此==
它们实际上可能表现不同
如果您这样做,可能会出现很难发现的印刷错误
if (myPtr = nsnull) /* assignment operator */
虽然你真的是这个意思
if (myPtr == nsnull) /* test equality */
这背后有什么原因吗?
存在公司编码准则是因为,在大型公司中,通常会有人将美学一致性置于其他编程问题之上。他们将生成大量无意义的指导方针,例如这个指导方针,并带有虚假的理由,即不相关细节的一致性使代码更具可读性。如果企业环境功能失调,这些指导方针将载入官方政策文件,并强加给所有开发人员。
或者它只是一个约定?
在这种情况下,最好不要使用一些可能会或可能不会评估为空指针值的非常规符号;尽管nsnull
本样式指南可能已对此进行了定义和授权,但其含义对于内部人员来说是很清楚的。是否if (ptr)
比更传统的if (ptr != 0)
(或NULL
,或nullptr
)更好是一个品味问题:有些人会为他们的选择打圣战,其他人则不在乎。
你的风格指南推荐的风格有一个名字:boolean zen。这是布尔表达式的本质。练习布尔禅意味着以最简单的形式编写布尔表达式。例如,这不是布尔 zen:
bool foo() {
if(myCondition()) {
return true;
} else {
return false;
}
}
用布尔 zen 重写,你会得到:
bool foo() {
return myCondition();
}
我相信很容易看出第二种更可取,只是因为它没有添加不必要的代码结构。
现在,在 C 派生中,如果在布尔上下文中使用,每个整数/指针也有一个定义的行为。手动进行转换是没有意义的。IE。在 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,无论哪种情况,您都应该坚持使用更简单的方法。
您可以在此幻灯片中找到有关布尔禅的介绍。