C 11 中引入的重大變更
C 11 引入了一些可能影響現有程式碼的編譯和行為的重大變更。
核心語言變更:
-
運算子重載: 標準庫中明確運算子bool() 的引入取代了舊的運算子void*() 實例。此變更可能會破壞先前依賴布林值隱式轉換的程式碼。
-
關鍵字新增:現在可以使用新關鍵字,例如alignas、constexpr和nullptr,並且可能與先前有效的識別碼。
-
整數文字:某些整數文字可能會更改類型從無符號整數變為有符號 long long,導致計算中存在潛在錯誤。
-
除法舍入:無論是否使用浮點類型,整數除法現在總是向 0 舍入。
-
隱式建構子定義:現在刪除了一些隱式建構子定義,使先前呼叫它們的程式碼有效無效。
-
隱式異常規範:使用者宣告的析構函數現在具有隱式異常規範,這可能會影響異常處理行為。
-
依賴函數調用: 現在允許具有內部連結的函數的依賴調用,從而改變某些函數調用的分辨率
庫更改:
-
標頭衝突:新的標準庫標頭可能與名稱相似的現有標頭衝突,例如和 。
-
保留命名空間: posix 全域命名空間現在保留用於標準化,這會引發先前在此命名空間中定義識別碼的程式碼的問題。
-
巨集衝突: 為 override、final、carrys_dependency 和 noreturn 定義的巨集現在是在 C 11 中無效,可能會影響使用這些巨集的程式碼。
值得注意的是,雖然這些變更很重要,但許多變更是有意為之,旨在提高語言的健全性和一致性。程式設計師應該檢查他們的程式碼庫,識別重大更改,並進行適當的修改以確保與 C 11 的兼容性。
以上是C 11 為現有程式碼帶來了哪些重大變化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!