C 11 中的重大更改
C 11 引入了可能影響現有程式碼編譯的重大更改,包括以下內容:
核心語言
- 在標準函式庫中引入明確運算子 bool(),取代運算子 void*() 的實例。此更改可能會導致先前依賴隱式轉換的程式碼無法編譯。
- 新關鍵字,包括alignas、alignof、char16_t、constexpr和nullptr,可能與不遵循命名約定的代碼中的現有標識符發生衝突.
- 整數除法的行為已更改,因為C 11 總是將結果舍入到0,而C 03 允許舍入到結果0 或負無窮大。
- 隱式宣告的特殊成員函數(例如建構函式或析構函式)現在被定義為已刪除(如果它們的隱式定義格式不正確),這可能會導致程式碼在某些上下文中使用這些函數變得無效。
- 使用者宣告的析構函數具有隱式異常規範,這表示它們不能拋出異常。依賴析構函數拋出異常的程式碼可能需要修改。
- 現在允許對具有內部連結的函數進行依賴調用,這可能會改變模板中重載函數的解析。
庫變更
- 新增至C 標準庫的識別碼C 11 可能與使用同名標頭的程式碼中的現有識別符發生衝突。
- 交換函數已從 移出。 的標頭標頭。包含 的程式碼可能需要更新以包含 相反。
- 全域命名空間 posix 現在保留用於標準化。在此命名空間中定義標識符的代碼可能需要修改。
- 名為 override、final、carrys_dependency 或 noreturn 的巨集在 C 11 中無效。定義這些巨集的程式碼可能需要更新。
以上是將程式碼遷移到 C 11 時我應該注意哪些重大變更?的詳細內容。更多資訊請關注PHP中文網其他相關文章!