C 標準では std::array のサイズが定義されていますか?
C 11 では、std::array は同等のパフォーマンスで連続ストレージを提供します通常の配列に。ただし、std::array のサイズとメモリ レイアウトが通常の配列のサイズとメモリ レイアウトを反映しているかどうかは不明です。
標準要件
C 標準 (§23.3.2.1/2)次の方法で初期化された集合体として配列を定義します。
array<T, N> a = { initializer-list };
集合体として、 std::array は、コンストラクターを使用して初期化子リスト内のデータを変換することはできません。これは、主に実際のデータ値を格納することを意味します。
実装固有の動作の可能性
技術的には、std::array に補助データを含めたり、補助データを含めなかったりすることが可能です。 - 標準の配列。通常の配列の動作から逸脱します。
の場合たとえば、コンパイラは std::array の末尾にセンチネル値を追加して、範囲外の書き込み試行を検出できます。あるいは、スーパーアライメント (インテル SSE 命令など) は std::array ではサポートされますが、組み込み配列ではサポートされません。
期待される動作
一般に、次のコードは意図したとおりに動作することが期待できます。
std::vector< std::array<int, N> > x(M); typedef int (*ArrayPointer)[N]; ArrayPointer y = (ArrayPointer) &x[0][0]; // Use y as a multidimensional array
Mostコンパイラ (GNU や Intel など) はこの動作に従います。ただし、標準では std::array と通常の配列の同一のメモリ レイアウトが明示的に保証されていないことに注意することが重要です。
以上がC 標準では、「std::array」のサイズとメモリ レイアウトが組み込み配列と同じであることが保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。