首頁 >後端開發 >C++ >`std::array` 是否具有與常規 C 陣列相同的大小和記憶體佈局?

`std::array` 是否具有與常規 C 陣列相同的大小和記憶體佈局?

Barbara Streisand
Barbara Streisand原創
2024-12-06 22:10:13180瀏覽

Does `std::array` have the same size and memory layout as a regular C   array?

C 標準中 std::array 的大小

std::array 的 C 11 規範確保連續儲存和效能與常規數組。然而,它提出了一個問題:std::array 是否具有與標準數組相同的大小和記憶體佈局。

根據標準的§23.3.2.1/2,陣列是一個聚合體,可以使用語法初始化:

std::array<T, N> a = { initializer-list };

作為聚合,std::array 必須直接儲存初始值設定項清單中的值。雖然理論上 std::array 可以儲存輔助資料或與常規數組的對齊方式不同,但這些可能性極不可能。

實際上,大多數編譯器將 std::array 視為連續的區塊記憶體的大小和佈局與常規數組相同。此行為得到第三方文件的支持,並在各種編譯器中觀察到。

例如,以下程式碼將std::array 作為多維數組指針訪問,按預期工作:

std::vector<std::array<int, N>> x(M);
typedef int (*ArrayPointer)[N];
ArrayPointer y = (ArrayPointer)&x[0][0];
// use y like normal multidimensional array

根據這些觀察,通常可以安全地假設:

sizeof(std::array<int, N>) == sizeof(int) * N

但是,重要的是要注意此行為並沒有受到標準的嚴格保證。編譯器在如何實現 std::array 方面具有一定的靈活性,標準的未來修訂可能會改變這種行為。

以上是`std::array` 是否具有與常規 C 陣列相同的大小和記憶體佈局?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn