例如,请考虑以下代码.指针p指向a包含非零值的变量.意思是,条件应该是真的.所以,如果程序返回1,我没有问题.
#include <iostream>
int main()
{
int *p, a = 1;
p = &a;
if(p)
{
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但对于以下程序,结果也是一样的.虽然这次指针指向一个包含0的变量.因此,条件应该是false,但事实并非如此.
#include <iostream>
int main()
{
int *p, a = 0;
p = &a;
if(p)
{
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
那么,我错过了什么?为什么条件总是返回真实?我假设指针与它指向的值无关.相反,它是在其他东西的基础上评估条件,我想知道这个特定的原因.
小智 6
空指针被隐式转换为布尔值false,而非空指针转换为true.从C++ 11标准,有关布尔转换的部分:
算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为bool类型的prvalue.零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.类型为std :: nullptr_t的prvalue可以转换为bool类型的prvalue; 结果值为false