1

Mozilla Developer Style GuideC/C++ Practices下,可以找到:

测试指针时,使用 (!myPtr) 或 (myPtr);不要使用 myPtr != nsnull 或 myPtr == nsnull。

这背后有什么原因吗?或者它只是一个约定?

4

4 回答 4

2

一般来说,公司编码指南就是这样 - 预计将在该公司内部执行的指南。

这是一个偏好问题——它们都实现了相同的目标(假设myPtr是指针*),所以这纯粹是主观的。对于大型代码库,看到if (myPtr)一半的地方和if (myPtr != NULL)另一半的地方很烦人。

*如果myPtr是非指针用户定义类型,它可以重载运算符!!=因此==它们实际上可能表现不同

于 2012-09-25T10:38:24.930 回答
1

如果您这样做,可能会出现很难发现的印刷错误

if (myPtr = nsnull) /* assignment operator */

虽然你真的是这个意思

if (myPtr == nsnull) /* test equality */
于 2015-04-26T13:12:34.677 回答
0

这背后有什么原因吗?

存在公司编码准则是因为,在大型公司中,通常会有人将美学一致性置于其他编程问题之上。他们将生成大量无意义的指导方针,例如这个指导方针,并带有虚假的理由,即不相关细节的一致性使代码更具可读性。如果企业环境功能失调,这些指导方针将载入官方政策文件,并强加给所有开发人员。

或者它只是一个约定?

在这种情况下,最好不要使用一些可能会或可能不会评估为空指针值的非常规符号;尽管nsnull本样式指南可能已对此进行了定义和授权,但其含义对于内部人员来说是很清楚的。是否if (ptr)比更传统的if (ptr != 0)(或NULL,或nullptr)更好是一个品味问题:有些人会为他们的选择打圣战,其他人则不在乎。

于 2012-09-25T11:21:34.410 回答
0

你的风格指南推荐的风格有一个名字: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,无论哪种情况,您都应该坚持使用更简单的方法。


您可以在此幻灯片中找到有关布尔禅的介绍。

于 2015-04-26T14:01:26.553 回答