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

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

Susan Sarandon
Susan Sarandon原創
2024-11-23 06:06:211078瀏覽

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中文網其他相關文章!

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