C 11 ではどのような重大な変更が導入されていますか?
C 11 で導入された重要な変更の 1 つは、次の明示的な演算子 bool() です。標準ライブラリで、演算子 void*() のインスタンスを置き換えます。この変更は無効なコードに対処する必要がありますが、考慮すべき重大な変更が他にもあります。
コア言語の非互換性
-
変更された文字列リテラルの解釈: 「u8」などの定義済みマクロは文字列を変更する可能性がありますリテラル。
-
ユーザー定義の文字列リテラル: 文字列リテラル内の「_x」は、マクロを展開する代わりに、ユーザー定義の文字列リテラルを作成するようになりました。
-
新しいキーワード: 「constexpr」や「thread_local」などのキーワードが導入されると、既存のキーワードが壊れる可能性があります識別子名。
-
整数リテラルの変更: 「long」の範囲を超える整数リテラルは、「long long」になる可能性があります。
-
整数除算の変更: C 03 の整数除算の丸め動作は、C 11 の整数除算の丸め動作とは異なる場合があります。 0.
-
"auto" as Storage Specifier: ストレージ指定子として "auto" を使用する C 03 コードは無効になる可能性があります。
-
Narrowing Conversions: C 03 の縮小変換 (例: double から int) が可能になりました。無効です。
-
暗黙的な特殊メンバー関数の削除: 不正な形式の暗黙的に定義されたメンバー関数は自動的に削除されます。
-
デストラクター例外仕様: ユーザー宣言されたデストラクターには暗黙的な noexcel(true) が含まれるようになりました。仕様。
-
"export" 宣言の削除: "export" を使用した C 03 宣言は無効になりました。
-
テンプレート終了の変更: "> >"テンプレート内では、シフト演算子としてのみ考慮されるのではなく、2 つのテンプレートを閉じることができるようになりました。
-
内部リンケージ関数の依存呼び出し: 内部リンケージ関数の依存呼び出しが許可されるようになりました。
ライブラリ変更
-
名前空間識別子: 標準ライブラリに追加された識別子は、既存のコードを壊す可能性があります。
-
ヘッダーに含まれるもの: 以前のヘッダー特定の標準ヘッダー (例: 、
-
"posix" 名前空間: "posix" 名前空間は、将来の標準化のために予約されています。
-
マクロ定義: 「override」、「final」、「carries_dependency」、または「noreturn」を次のように定義しますマクロは無効になっている可能性があります。
以上がC 11 に移行する際に注意すべき重大な変更は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。