Joh*_*itb 11
从理论的角度来看,是的.但这是一件可怕的事情.
NULL
是一个空指针常量,分配给指针使其指向任何内容.
...
ptr = NULL; // now it points to no object anymore
...
// or ptr == 0
if(ptr == NULL) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果您对任何情况感兴趣,以下是对标准的引用.首先,空指针常量是(4.10/1
)
空指针常量是整数类型的整数常量表达式(5.19)rvalue,其值为零.
然后,如果我们将空指针常量转换为bool
?会发生什么?它的解释4.12/1
如下:
算术,枚举,指针或指向成员类型的指针的右值可以转换为bool类型的右值.零值,空指针值或空成员指针值转换为false; 一个
(当它谈论rvalue
它时,本质上意味着一个简单的值而不是那种类型的变量).
现在,究竟是那个NULL
?读18.1/4
(注意在C中,空指针常量的定义不同.这可能是它明确引用C++的原因)
宏NULL是本国际标准中实现定义的C++空指针常量
该组合的重要部分是" A zero value ... is converted to false
" 部分.的分配NULL
到一个布尔变量将尝试转换NULL
为布尔值.如上述段落所述,存在并且可以进行这种转换.
关于空指针要理解的另一个重要的事情是a null pointer
和a 之间的不同null pointer constant
.正如我们刚刚读到的那样,空指针常量是一个零的整数值.但是,a null pointer
和它的值a null pointer value
是指针,它们的类型是指针类型.以下类型为int,并且是一个空指针常量
#define NULL ('n'-'n') // looks suspicious, but conforms
Run Code Online (Sandbox Code Playgroud)
因为它是一个整数常量表达式(基本上是一个在编译时已知的整数值),其值为零.以下是空指针值
(void*)NULL
Run Code Online (Sandbox Code Playgroud)
但它不是空指针常量.但无论如何,空指针值也会转换为bool,如上面的引用所示:" A .. null pointer value .. is converted to false
".所以你一切都很好.
从我的n2798副本:
18.1类型
3宏NULL是本国际标准(4.10)中实现定义的C++空指针常量
和
4.12布尔转换[conv.bool]
1算术,无范围枚举,指针或指向成员类型的指针的右值可以转换为bool类型的右值.零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.类型为std :: nullptr_t的右值可以转换为bool类型的右值; 结果值为false.
所以,是的,你似乎可以做到这一点.