【发布时间】:2010-08-18 21:24:45
【问题描述】:
选项 A:
if (NULL == pSomethingColumn) // Yes, we use Yoda conditions
if (NULL != pSomethingColumn)
或者
if (pSomethingColumn)
if (!pSomethingColumn)
我也在寻找解释推理的参考资料。
我听一些人说,从技术上讲,NULL 不必定义为0,但是来吧!如果是这种情况,那么傻瓜(我们的应用程序)将以不同的方式崩溃 -2147483648。
所以,如果NULL != 0,那我们就有大问题了。
请帮我解决毫无意义的语法辩论。我对这两种方式都不是特别执着;只是在寻找官方的方式。谢谢。
附:我们正在使用 Visual Studio C++ 编译器。
【问题讨论】:
-
我很确定
NULL在任何符合标准的编译器上都必须为 0。 -
@Hamish Grubijan:C++ 标准 4.10 “空指针常量是整数类型的整数常量表达式 (5.19) 右值,其计算结果为零。”和 18.1 “宏 NULL 是实现定义的 C++ 空指针常量”。同一页的脚注表明
0和0L对NULL有效,但对(void *)0无效。 -
18.1/4:“宏 NULL 是本国际标准 (4.10) 中实现定义的 C++ 空指针常量”。但是 4.10 说“空指针常量是整数类型的整数常量表达式 (5.19) 右值,其计算结果为零。空指针常量可以转换为指针类型;结果是该类型的空指针值......”所以0 表示 NULL,但如果是 NULL,则不一定是按位 0。
-
我觉得有必要指出
nullptr只是 C++0x 中的另一个空指针常量。0和NULL(可能是也可能不是nullptr_t类型的东西,或者可能仍然是0,取决于实现)不会消失。 -
在 VS2005 及更高版本中不再需要 Yoda 条件,如果您错过其中一个等号,编译器会生成警告。
标签: c++ pointers null coding-style