C 標準定義了 std::array 的大小嗎?
在 C 11 中,std::array 提供連續存儲,性能相當到常規數組。但是,尚不清楚 std::array 的大小和記憶體佈局是否與普通數組相同。
標準要求
C 標準(§23.3.2.1/2)將陣列定義為透過以下方式初始化的聚合:
作為聚合,std::array 無法使用建構函式來轉換初始值設定項清單中的資料。這意味著它主要存儲實際數據值。
潛在的特定於實現的行為
從技術上講,std::array 可以包含輔助資料或非輔助資料。 - 標準對齊,這會偏離正常數組的行為。
例如,編譯器可以在 std::array 的末尾加上一個哨兵值來偵測越界寫入嘗試。或者,std::array 可以支援超級對齊(例如,英特爾 SSE 指令),但內建陣列不支援。
預期行為
一般來說,您可以預期以下程式碼能如預期運作:
大多數編譯器(例如GNU 和英特爾)都遵循此行為。然而,值得注意的是,該標準並沒有明確保證 std::array 和普通數組具有相同的記憶體佈局。
以上是C 標準是否保證「std::array」與內建陣列具有相同的大小和記憶體佈局?的詳細內容。更多資訊請關注PHP中文網其他相關文章!