这是一个nullptr吗?

mas*_*oud 5 c++

阅读这个 Q&A,我认为p不应该是一个nullptr即使x0.我明白了吗?

int main()
{
    int x = 0;

    std::cin >> x; // Enter `0`

    void *p = (void *)x; // or: void *p = reinterpret_cast<void*>(x);


    if (!p)
        std::cout << "p is nullptr" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输入0标准输入后,该消息p is nullptr将显示在我的GCC中.根据链接,它不应该评估nullptr,但结果不是我的期望.

代码是否未定义行为?或未指明的结果?为什么要评估nullptr

Mic*_*urr 11

来自C++ 11 5.2.10/5重新解释cast [expr.reinterpret.cast](强调添加):

可以将整数类型或枚举类型的值显式转换为指针.转换为足够大小的整数的指针(如果在实现上存在任何此类)并返回到相同的指针类型将具有其原始值; 指针和整数之间的映射在其他方面是实现定义的.

5.2.10/4中的相关位:

std :: nullptr_t类型的值可以转换为整数类型; 转换与(void*)0到整数类型的转换具有相同的含义和有效性.[注意:reinterpret_cast不能用于将任何类型的值转换为std :: nullptr_t类型. - 尾注]