C 11 中引入的重大更改
C 11 引入了幾項重大更改,這些更改可能導致以前有效的程式碼在編譯期間失敗。一個顯著的變化是在標準函式庫中引入了明確運算子 bool(),取代了運算子 void*() 的實例。雖然此變更主要影響依賴隱式轉換的無效程式碼,但它仍然構成重大變更。
核心語言更改
- 關鍵字alignas、alignof、char16_t 、 char32_t、constexpr、decltype、noexcept、nullptr、thic_calt 和 引入了。
- 大於 long 的整數文字現在可以被視為有符號 long long,而不是無符號整數。
- 除法現在總是向 0 舍入,與 C 2003 不同,C 2003 可能向負無窮舍入在某些情況下。
- auto 關鍵字不能再用作儲存類別說明符,因為它是為新的儲存類別保留的功能。
- 縮小轉換範圍會導致不相容。例如,將 double 指派給 int 現在是無效的。
- 當明確定義格式不正確時,隱式特殊成員函數將被定義為已刪除,從而導致先前有效的程式碼出現錯誤。
- 使用者宣告的析構函式有隱式異常規範(noexcept(true)),它可以在catch區塊中觸發不同的行為。
- export關鍵字不再是在 C 11 中有效。
- 運算子>>現在可用於關閉兩個模板,可能會影響使用序列 >> 的程式碼作為移位運算子。
- 現在允許具有內部連結的函數的依賴呼叫。
庫變更
- 標準庫C 11 中引入的識別碼可能與使用者定義的識別符衝突。
- 標頭包含引用 C 11 標準函式庫中的新頭檔可能無法編譯。
- 交換函數已從 移至 。
- posix 全域命名空間現已保留。
- 宏 override、final、carrys_dependency 和 noreturn 不再有效。
以上是C 11 引入了哪些重大變化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!