Jua*_*cek 7 c++ null pointers boolean
在下面的代码中,使用(!!p)代替的有(p != NULL)什么好处?
AClass *p = getInstanceOfAClass();
if( !!p )
// do something
else
// do something without having valid pointer
Run Code Online (Sandbox Code Playgroud)
Wer*_*sey 11
它几乎是一样的,虽然我认为这!!p是一种糟糕的风格,并且通常表明一个程序员试图变得聪明.
我认为GMan的原始评论应该是公认的答案:
我想知道什么是错的
if (p)
重点是:它没有任何问题,这应该是首选方式.首先,!!p是"太聪明"; 它也是完全不必要的,因此也很糟糕(注意:我们在if这里的声明中讨论指针,所以Anacrolix的评论虽然通常有效,但在这里不适用!).
同样的道理p != NULL.虽然这是可能的,但它根本不需要.这是更多的代码,它是完全冗余的代码,因此它使代码变得更糟.Jeff Atwood曾经说过的最真实的事情是"最好的代码根本就没有代码."避免冗余语法.坚持以最小的(仍然传达了完整的意思; if (p) 是完成).
最后,if (p)可以说是用C++编写它的最惯用的方法.C++向后弯曲以获得语言中其他类型(例如数据流)的相同行为,但代价是一些非常奇怪的怪癖.该标准的下一个版本甚至引入了新的语法,以在用户定义的类型中实现此行为.
对于指针,我们免费获得相同的信息.所以使用它.
/编辑:关于清晰度:sharptooth写道
IMO与空指针的比较更清楚.
我声称这是客观错误的:if (p)更清楚.在C++中,无论是在这种情况下还是在任何其他情况下,这种陈述都不可能有任何意义.
| 归档时间: |
|
| 查看次数: |
2563 次 |
| 最近记录: |