閱讀this Q & A,我想p
不應該是一個即使nullptr
x
是0
。我理解了嗎?這是一個nullptr?
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說它確實是值得的)。 – dlf
什麼是'nullptr'你在說C++/CLI嗎? 'NULL'與0一樣爲零,一些C++編碼人甚至使用'NULL',因爲它太不確定(而不是測試0或0L)。 –