我在C++中编码,并使用在失败的情况下返回NULL的C函数.什么是正确的想法,将其返回值与NULL或nullptr进行比较?
if ((CreateEventEx(myEventHandleHere) == NULL)
{
...
}
Run Code Online (Sandbox Code Playgroud)
要么
if ((CreateEventEx(myEventHandleHere) == nullptr)
{
...
}
Run Code Online (Sandbox Code Playgroud)
该草案C++标准中的附录C.4 C标准库这是不规范的说:
在任何<clocale>,<cstddef>,<cstdio>,<cstdlib>,<cstring>,<ctime>或<cwchar>中定义的宏NULL是本国际标准中实现定义的C++空指针常量(18.2).
相应的规范部分同意例如18.2说:
宏NULL是本国际标准(4.10)中实现定义的C++空指针常量.194
这意味着如果你使用那些特定的标题NULL应该兼容,nullptr然后我会使用nullptr.
在D涵盖兼容性的附录中似乎没有对头.h文件做出类似的声明,所以尽管我们期望NULL并且nullptr应该兼容空指针常量,如果它们不是从标准的角度来看,我们会感到惊讶不明确.这使我们陷入两难境地,从实际角度来看,我们非常确定它们是兼容的,但我们没有足够的信息来证明它.
所以我会使用NULL你正在使用的特定头文件所定义的,或者我们可以使用,!= 0因为幸运的是C99和C++ 11告诉我们这0是一个空指针常量.
来自C99部分6.3.2.3 指针:
值为0的整型常量表达式或类型为void*的表达式称为空指针常量.55)如果将空指针常量转换为指针类型,则生成的指针(称为空指针)为保证比较不等于指向任何对象或函数的指针.
和:
任何指针类型都可以转换为整数类型.除非先前指定,否则结果是实现定义的
和C++部分4.10 指针转换告诉我们:
空指针常量是值为零的整数文字(2.14.2)或类型为std :: nullptr_t的prvalue.空指针常量可以转换为指针类型; 结果是该类型的空指针值,并且可以与对象指针或函数指针类型的每个其他值区分开来.[...]
| 归档时间: |
|
| 查看次数: |
2587 次 |
| 最近记录: |