ホームページ >バックエンド開発 >C++ >コードを C 11 に移行する際に注意すべき重大な変更は何ですか?

コードを C 11 に移行する際に注意すべき重大な変更は何ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-24 17:19:28482ブラウズ

What Breaking Changes Should I Be Aware Of When Migrating Code to C  11?

C 11 の重大な変更

C 11 では、既存のコードのコンパイルに影響を与える可能性のある次のような重要な変更が導入されました。

コア言語

  • 標準ライブラリに明示的な演算子 bool() が導入され、演算子 void*() のインスタンスが置き換えられます。この変更により、以前は暗黙的な変換に依存していたコードがコンパイルに失敗する可能性があります。
  • alignas、alignof、char16_t、constexpr、nullptr などの新しいキーワードは、命名規則に従っていないコード内の既存の識別子と競合する可能性があります。 .
  • 整数除算の動作が変更されました。C 11 は結果を常に 0 に向かって丸めますが、C は03 は、0 または負の無限大に向かって丸めることができます。
  • コンストラクターやデストラクターなどの暗黙的に宣言された特殊メンバー関数は、暗黙的な定義が不正な形式である場合に削除されるように定義されるようになりました。これにより、コードが使用される可能性があります。これらの関数は、特定のコンテキストでは無効になります。
  • ユーザー宣言のデストラクターには暗黙の例外仕様があり、例外をスローできません。例外をスローするデストラクターに依存するコードは変更が必要な場合があります。
  • 内部リンケージを使用した関数の依存呼び出しが許可されるようになりました。これにより、テンプレート内のオーバーロードされた関数の解決が変更される可能性があります。

ライブラリの変更

  • に追加された識別子C 11 の C 標準ライブラリは、同じ名前のヘッダーを使用したコード内の既存の識別子と競合する可能性があります。
  • スワップ関数は、 から移動されました。 のヘッダーヘッダ。 を含むコード を含めるように更新する必要がある場合があります。
  • グローバル名前空間 posix は標準化のために予約されています。この名前空間で識別子を定義するコードは変更する必要がある可能性があります。
  • override、final、carry_dependency、または noreturn という名前のマクロは C 11 では無効です。これらのマクロを定義するコードは更新する必要がある可能性があります。

以上がコードを C 11 に移行する際に注意すべき重大な変更は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。