【发布时间】:2014-05-13 18:29:44
【问题描述】:
阅读this问答,我认为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;
}
在标准输入中输入0 后,消息p is nullptr 将显示在我的GCC 中。
根据link,它不应该评估为nullptr,但结果不是我的预期。
代码是未定义的行为吗?或未指定的结果?为什么它评估为nullptr?
【问题讨论】:
-
你正在将一个值为 0 的
int投射到一个void *指针(对于所有意图和目的,它也可能只是一个美化的并且可能更广泛的 int) - 仍然0 的值。您希望p具有什么值? -
if确实是在测试 p == 0 是否,它当然可以。 0 == nullptr 是否是一个更有趣的问题(VC++2012 说它确实如此,因为它的价值)。 -
nullptr是什么,你在说 C++/CLI 吗?NULL与零一样为零,一些 C++ 编码人员甚至避免使用NULL,因为它太不确定(而是测试 0 或 0L)。 -
@dlf:VC++2012 所说的无关紧要。 规范说的是什么。
-
@dlf 不,实际上是相反的。
0 == nullptr,顾名思义。问题仅仅在于将int0转换为指针是否也等于它。在 OP 的代码中似乎是这样,但有一些例子(虽然我现在找不到链接)不是这种情况(即空指针由非零位模式表示)。
标签: c++