ホームページ > バックエンド開発 > C++ > 指定された初期化子リストが C 11 から除外されたのはなぜですか?

指定された初期化子リストが C 11 から除外されたのはなぜですか?

Barbara Streisand
リリース: 2024-12-27 22:46:11
オリジナル
236 人が閲覧しました

Why Were Designated Initializer Lists Excluded from C  11?

C 11 での指定初期化子リストの除外

C 11 には、C99 に存在する機能である指定初期化子リストのサポートがありません。この省略により、一部の開発者は困惑しており、なぜこのような便利な構文が新しい標準に含まれていないのかと疑問に思っています。

根拠

C 標準委員会は、次の提案を一貫して拒否してきました。指定された初期化子リストを言語に組み込みます。その理論的根拠は、いくつかの固有の課題に由来しています。

評価順序の不確定性:

C99 では、指定された初期化子の部分式の評価順序は不定です。これにより、特に初期化に関数の相互作用や副作用が含まれる場合、予期しない動作が発生する可能性があります。

互換性違反:

C が不定の評価を持つ指定された初期化子リストを実装した場合順序を変更すると、通常は一貫した評価を提供する既存の C99 実装との互換性が失われます。

実現可能性に関する懸念:

標準委員会は、次の厳格な初期化子リスト要件を満たす方法で指定された初期化子リストを実装する実現可能性について繰り返し疑問を表明してきました。 C (11.6.4[dcl.init.list]4).

C 20 における指定子の制限

指定された初期化子リストは C 11 および C 17 から除外されたままですが、 C 20 標準では、決定性と互換性を確保するために、制限付きの部分的なサポートが導入されています。これらの制限には次のものが含まれます。

  • 初期化の順序で宣言されたデータ メンバーのみを指定できます。
  • 配列およびネストされた初期化はサポートされません。
  • すべてかなしのデータ メンバーは次のように初期化する必要があります。

結論

C 11 からの指定初期化子リストの除外は、評価順序の不定性に対する懸念に動機付けられた、標準委員会による意図的な決定でした。互換性の問題と実装上の課題。最終的には限定的なサポートが C 20 に追加されましたが、C 標準は引き続き厳密なイニシャライザの順序を強制し、プログラムの正確性や移植性を損なう可能性のある予期しない動作を回避することに重点を置いています。

以上が指定された初期化子リストが C 11 から除外されたのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート