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 サイトの他の関連記事を参照してください。