std::array 的大小是否由標準強制執行?
在 C 11 中,std::array 保證具有連續性儲存和效能超越或等於常規陣列。然而,問題仍然存在:標準是否明確定義了 std::array 的大小和記憶體佈局?
探索標準的要求
標準定義了std:: array 作為一個聚合,可以使用語法初始化:
std::array<T, N> a = { initializer-list };
作為一個聚合,std::array 不能使用建構子來轉換來自初始化清單的資料。這意味著數組主要存儲值本身。
與預期行為的可能偏差
技術上,標準並未禁止某些潛在偏差:
編譯器變體
儘管標準含糊不清,但在GNU 和Intel 等主要編譯器中的實際使用表明std::array 的大小和記憶體佈局鏡像了常規數組的大小和記憶體佈局。
std::vector< std::array<int, N> > x(M); typedef int (*ArrayPointer)[N]; ArrayPointer y = (ArrayPointer) &x[0][0]; // Safe multidimensional array-like usage
它是值得注意的是,雖然此程式碼按預期運行,但並不能保證所有實作都遵循此模式。因此,在關鍵任務程式碼中依賴這種行為是不可取的。
以上是C 標準是否保證「std::array」的大小和記憶體佈局?的詳細內容。更多資訊請關注PHP中文網其他相關文章!