C の匿名構造体 : なぜ存在しないのか?
C は、匿名共用体のような構文拡張により C の機能を拡張します。ただし、この構文上の利便性を拡張する機能である匿名構造体は、標準には明らかに存在しません。この決定の背後には何があるのでしょうか?
C でサポートされている匿名共用体とは異なり、C は匿名構造体を提供しません。その結果、C は互換性のために匿名共用体をサポートしますが、互換性の必要がないため、匿名構造体は省略します。
さらに、異なる名前 (例: . v[i]、.x、.y、.z) は、C で未定義の動作を引き起こす可能性があります。 C では、ある共用体メンバー (.v[1]) に書き込み、その後別の共用体メンバー (.y) から読み取ることを禁止しています。一部のコードはこの慣例に従っているかもしれませんが、依然として不明確です。
C は、次の構造体で例示されているように、そのようなシナリオに対する代替ソリューションを提供します。
struct vector3 { float v[3]; float &operator[](int i) { return v[i]; } float &x() { return v[0]; } float &y() { return v[1]; } float &z() { return v[2]; } };
要約すると、 C の匿名構造体の欠如は、不必要な互換性の考慮事項と、同様の効果を達成するための代替メカニズムの可用性から生じており、言語内で明確に定義された動作を保証します。
以上がなぜ C は匿名構造体をサポートしないのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。