3 回答

TA貢獻1951條經(jīng)驗 獲得超3個贊
允許編譯器假定作為參數(shù)傳遞的布爾值是有效的布爾值(即已初始化或轉換為true或的值false)。該true值不必與整數(shù)1相同-實際上,可以有trueand的各種表示形式false-但是參數(shù)必須是這兩個值之一的某種有效表示形式,其中“有效表示形式”是實現(xiàn)-定義。
因此,如果您未能初始化a bool,或者通過其他類型的指針成功覆蓋了它,則編譯器的假設將是錯誤的,并且將導致未定義的行為。您被警告過:
50)以本國際標準描述為“未定義”的方式使用布爾值,例如檢查未初始化的自動對象的值,可能會導致其行為既不正確也不錯誤。(第6.9.1節(jié)“基本類型”第6段的腳注)

TA貢獻1797條經(jīng)驗 獲得超6個贊
該函數(shù)本身是正確的,但是在您的測試程序中,調用該函數(shù)的語句通過使用未初始化的變量的值導致未定義的行為。
該錯誤位于調用函數(shù)中,可以通過對調用函數(shù)進行代碼審查或靜態(tài)分析來檢測到。使用您的編譯器瀏覽器鏈接,gcc 8.2編譯器確實可以檢測到該錯誤。(也許您可以針對clang提交一個錯誤報告,指出它沒有發(fā)現(xiàn)問題)。
未定義的行為意味著任何事情都會發(fā)生,包括程序在觸發(fā)未定義的行為的事件后崩潰了幾行。
注意 答案為“未定義的行為會導致_____嗎?” 始終為“是”。從字面上看,這就是未定義行為的定義。
- 3 回答
- 0 關注
- 553 瀏覽
添加回答
舉報