std::array サイズとメモリ レイアウトの保証されたセマンティクス
C 11 では、std::array は連続ストレージと同等のパフォーマンスを提供します。通常の配列。ただし、標準の std::array の要件では、同等の配列と同じサイズとメモリ レイアウトを持つ必要があるのかという疑問が生じます。
C 標準の §23.3.2.1/2 によると、std: :array は、初期化子リストを使用して初期化された集合体です。集計関数はコンストラクターを使用してデータを変換できないため、初期化リストは配列に格納されている値を直接表す必要があります。
これは、std::array のサイズが、その配列で指定された要素の数によって決定される必要があることを意味します。テンプレート引数。さらに、メモリ レイアウトは、補助データやパディングのない配列のレイアウトと同一である必要があります。
標準ではこの要件が明示的に規定されていませんが、std::array の集合的な性質によって強く暗示されています。
これは、sizeof(std::array
実際には、コンパイラーと実装は通常、この予想される動作に従います。ただし、標準はこれを厳密に強制するものではなく、準拠しない実装が行われる可能性が残されていることに注意することが重要です。
以上が`std::array` は通常の C 配列と同じサイズとメモリ レイアウトを保証しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。