为什么包含指针的条件总是返回true?

Rub*_*sen 0 c++ pointers

例如,请考虑以下代码.指针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