可以取消引用 NULL 指標來取得引用嗎?
C 標準將取消引用 NULL 指標定義為未定義行為。但是,涉及NULL 指標取消引用以獲得引用的程式碼片段(如下所示)會引發問題:
int* ptr = NULL; int& ref = *ptr; int* ptr2 = &ref;
標準定義:
根據C 標準( 8.3.2/4「引用」),明確定義的程式中不能存在空引用。這是因為創建這樣的引用需要將其綁定到透過取消引用空指標所獲得的“物件”,這構成了未定義的行為。
實作細節還是明確定義的?
實際上,提供的程式碼片段會導致 ptr2 設定為 NULL。然而,這只是一個實作細節。標準明確規定取消引用空指針是未定義的。
取消引用 NULL 指標的影響:
通常,取消引用空指標會導致崩潰。在使用它來獲取引用的特定情況下,編譯器將引用實現為指針,從而消除了實際的取消引用操作。儘管如此,底層的未定義行為仍然存在。
異常:sizeof 運算子
以明確定義的方式取消引用空指標的例外是 sizeof 運算子。使用 sizeof 時,不會計算操作數,從而避免了取消引用操作。
以上是在 C 中可以明確定義取消引用 NULL 指標以獲得引用嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!