ホームページ >バックエンド開発 >C++ >`std::array` は通常の C 配列と同じサイズとメモリ レイアウトを保証しますか?

`std::array` は通常の C 配列と同じサイズとメモリ レイアウトを保証しますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-23 06:06:211015ブラウズ

Does `std::array` Guarantee the Same Size and Memory Layout as a Regular C   Array?

std::array サイズとメモリ レイアウトの保証されたセマンティクス

C 11 では、std::array は連続ストレージと同等のパフォーマンスを提供します。通常の配列。ただし、標準の std::array の要件では、同等の配列と同じサイズとメモリ レイアウトを持つ必要があるのか​​という疑問が生じます。

C 標準の §23.3.2.1/2 によると、std: :array は、初期化子リストを使用して初期化された集合体です。集計関数はコンストラクターを使用してデータを変換できないため、初期化リストは配列に格納されている値を直接表す必要があります。

これは、std::array のサイズが、その配列で指定された要素の数によって決定される必要があることを意味します。テンプレート引数。さらに、メモリ レイアウトは、補助データやパディングのない配列のレイアウトと同一である必要があります。

標準ではこの要件が明示的に規定されていませんが、std::array の集合的な性質によって強く暗示されています。

これは、sizeof(std::array) が実際に次と等しい必要があることを意味します。 sizeof(int) * N。元の問い合わせで指定された例が意図したとおりに機能することを保証します。

実際には、コンパイラーと実装は通常、この予想される動作に従います。ただし、標準はこれを厳密に強制するものではなく、準拠しない実装が行われる可能性が残されていることに注意することが重要です。

以上が`std::array` は通常の C 配列と同じサイズとメモリ レイアウトを保証しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。