考慮到下面的代碼,在nullptr
上做指針運算是否安全?nullptr和指針算術
我想添加任何偏移量爲nullptr
導致另一個nullptr
,到目前爲止MSVC產生的結果如我所料,不過我有點不確定使用nullptr
這樣是否安全:
float * x = nullptr;
float * y = x + 31; // I assume y is a nullptr after this assigment
if (y != nullptr)
{
/* do something */
}
'int * a; a ++;'是UB,即使我不取消引用指針?你能給一個參考嗎? – user463035818
@ tobi303:沒有參考,因爲標準沒有明確說明它是未定義的。 [expr.add]/5定義了指針+ integer * only *對指向數組的指針(或指向對象,其作爲1的數組)的行爲。如果指針未指向數組,則根據定義,行爲是未定義的(除了在加0的情況下,對所有指針定義的[expr.add]/8)。 –
@ tobi303 UB並不意味着「崩潰」,它的意思是「我們沒有定義這是什麼」。碰巧,編譯器可以積極地優化和檢測UB,並導致程序出乎意料地行爲。一所優化學校「因爲UB不能在良好的程序中出現,所以導致UB的任何邏輯鏈都可以安全地消除,直到並且包括在代碼中跳過明確的」if「檢查。簡而言之,UB會導致*時間旅行*錯誤,遠離UB的代碼的行爲方式與您編寫的代碼不匹配。 – Yakk