C 11 で導入された重大な変更
C 11 では、以前は有効だったコードがコンパイル中に失敗する可能性があるいくつかの重大な変更が導入されています。注目すべき変更の 1 つは、標準ライブラリに明示的な演算子 bool() が導入され、演算子 void*() のインスタンスが置き換えられたことです。この変更は主に、暗黙的な変換に依存する無効なコードに影響しますが、それでも重大な変更となります。
コア言語の変更
- キーワード alignas、alignof、char16_t 、char32_t、constexpr、decltype、noexc、nullptr、 static_assert と thread_local が導入されました。
- long より大きい整数リテラルは、符号なし整数ではなく符号付き long long として扱われるようになりました。
- 除算は、C 2003 とは異なり、常に 0 に向かって丸められます。場合によっては負の無限大に向かって丸められます。
- auto キーワードはストレージ クラスとして使用できなくなりました新しい機能用に予約されている指定子です。
- 縮小変換は非互換性を引き起こします。たとえば、double を int に代入することは無効になりました。
- 暗黙的な特殊メンバー関数は、明示的な定義が不正な形式である場合に削除されるように定義され、以前は有効だったコードでエラーが発生します。
- ユーザー宣言のデストラクターには暗黙の例外仕様 (noexcel(true)) があり、catch ブロックで異なる動作を引き起こす可能性があります。
- export キーワードは no です。 C 11 では有効になりました。
- 演算子 >>を使用して 2 つのテンプレートを閉じることができるようになり、シーケンス >> を使用したコードに影響を与える可能性があります。
- 内部リンケージを使用した関数の依存呼び出しが許可されるようになりました。
ライブラリの変更
- 標準ライブラリC 11 で導入された識別子はユーザー定義の識別子と競合する可能性があります
- C 11 標準ライブラリの新しいヘッダーを参照するヘッダー インクルードはコンパイルに失敗する可能性があります。
- スワップ関数は から移動されました。
- posix グローバル名前空間は予約されています。
- マクロのオーバーライド、final、carry_dependency、および noreturn は無効になりました。
以上がC 11 ではどのような重大な変更が導入されましたか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。