標準コンテナーでの不完全な型のインスタンス化
C では、 std::vector や std::map などのコンテナーを使用してコンテナーのインスタンス化が可能です。不完全なタイプ。この手法は、自己参照型を通じて再帰的な構造を作成するために一般的に使用されていました。ただし、C 標準では、そのようなインスタンス化が許可されるかどうかという問題が生じます。
C 11 標準の §17.6.4.8 によると、明示的に許可されていない場合、不完全な型のインスタンス化は未定義の動作を引き起こす可能性があります。 std::vector などの一部のコンテナーは、value_type オブジェクトと値によって対話する value_type メンバーまたは関数を持たないため、不完全な型を適切に処理します。ただし、std::map はこの点で問題のある動作を示します。
標準の目的は、特定の実装で問題が発生しない場合でも、不完全な型のインスタンス化を禁止することです。これは主に、固定数の要素に対して std::vector を最適化するなど、再帰構造が許可されている場合に壊れる可能性があるなど、実装上の問題が発生する可能性があるためです。
そのため、標準ではコンテナに完全な型を使用することが義務付けられています。インスタンス化。ただし、std::unique_ptr で例示されるように、不完全な型を明示的にサポートするカスタム クラス テンプレートを作成する可能性は認められています。
その結果、標準コンテナは不完全な型でインスタンス化されるべきではありませんが、インスタンス化することは許容されます。このような使用法に対応するカスタム クラス テンプレートを考案してください。
以上が不完全な型を標準コンテナでインスタンス化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。