參考爲NULL
回答
由於編譯器在編譯時沒有檢查指針的值,因此您編寫的代碼將被編譯。但是,取消引用NULL指針是未定義的行爲。
這是我過去遇到過的一個問題,被燒成了我的記憶。我的進一步想法可以在這裏找到:https://stackoverflow.com/a/57656/5987
ptr是一個指針,它有一個地址。您將該指針設置爲null。所以該指針的值爲空。但指針本身有一個地址。引用被設置爲指針的地址 - 而不是其值。
現在對NULL本身的引用 - 會失敗。
int &ref = &NULL; // fail
不,'&NULL'不能編譯。 – 2012-07-31 20:49:08
Ad hominem攻擊不是必需的。問題是關於'int&ref = * ptr',它是* not *設置指針地址的引用 - 它設置引用指針指向的值,在一個情況下不存在空指針。 'int *&ref = ptr'會創建一個指針的引用。 '&NULL'不能編譯的事實與手頭的問題無關。 – 2012-07-31 21:21:32
您解除引用空指針。你的編譯器沒有強制要求抱怨這種格式不正確的程序。然而,這並不意味着在運行時可能會發生任何不好的事情。
從C++ 03 8.3.2/4:
注:特別是,空引用不能在良好定義的程序存在,因爲創建這樣的參考唯一 方式將是將其綁定到通過取消引用空指針獲得的「對象」,這會導致未定義的行爲。
從the C++ FAQ摘自:
C++語言,由C++標準定義,說這是非法的;這是非法的。 C++標準不要求對這個特定錯誤進行診斷,這意味着你的特定編譯器沒有義務注意到p是NULL或給出錯誤消息,但它仍然是非法的。 C++語言也不要求編譯器生成在運行時會炸掉的代碼。
- 1. 爲什麼null參考打印爲「null」
- 2. Null ImageView參考
- 3. null參考異常
- 4. Simple.Data惰性參考Null
- 5. Fragement參考返回null
- 6. Caldroid Null對象參考
- 7. 流利NHibernate:參考null
- 8. null對象參考布爾
- 9. 的Android SDK的Facebook對象--null參考
- 10. Null Object參考:應用程序崩潰
- 11. 片段參考null在簡歷
- 12. asp.net mvc 3,瞥見null參考錯誤
- 13. null對象的java.lang.String android.os.Bundle.getString(java.lang.String)'參考
- 14. null對象的java.lang.String java.lang.Object.toString()'參考
- 15. 作爲參考傳遞控制參考
- 16. 爲Web參考添加服務參考
- 17. 爲什麼RoutData.Values [「txtName」]會引發null參考錯誤?
- 18. 將int對象轉換爲int給出null參考
- 19. 春會話bean看到FacesContext.getCurrentInstance()爲Null參考
- 20. 在方法中將參考類型設置爲null
- 21. 使參數作爲參考
- 22. 參數作爲參考?
- 23. 參考作爲參數C
- 24. 傳輸參數爲const參考與正常參考
- 25. 角4作爲參數傳遞NULL null
- 26. IS參考參考在C++?
- 27. C++參考shared_ptr vs參考
- 28. 添加「System.Data.SQLite」作爲參考
- 29. MySQL表*作爲參考
- 30. 獲取值作爲參考
解引用空指針是UB。 – chris 2012-07-31 20:41:08
首先你問它如何編譯,然後你說它應該給運行時錯誤。這些不是同一個問題。你的意思是? – Almo 2012-07-31 20:42:11