阅读这个 Q&A,我认为p不应该是一个nullptr即使x是0.我明白了吗?
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类型. - 尾注]
| 归档时间: |
|
| 查看次数: |
464 次 |
| 最近记录: |