2 回答

TA貢獻(xiàn)1818條經(jīng)驗 獲得超3個贊
它幾乎需要。具體而言,第23.3.2.1/2節(jié)說:
數(shù)組是一個聚合(8.5.1),可以使用以下語法初始化
array<T, N> a = { initializer-list };
其中initializer-list是逗號分隔的列表,其中包含最多N個元素,其類型可轉(zhuǎn)換為T。
由于它是一個聚合,因此不能使用任何類型的構(gòu)造函數(shù)將初始化列表中的數(shù)據(jù)轉(zhuǎn)換為正確的格式。這實際上僅留下一種可能性:它唯一可以存儲的是值本身。
我想一個可能會std::array在指定的數(shù)據(jù)之后存儲某種輔助數(shù)據(jù),例如將額外的內(nèi)存設(shè)置為某個預(yù)定義的值,因此,如果您在數(shù)組末尾進(jìn)行寫操作,則可能會更改該數(shù)據(jù)。然后,編譯器/運(yùn)行時將在關(guān)閉時檢查這些值,如果您更改了這些值,請報告代碼的未定義行為。
它也可能是一個編譯器可以用于做填充/對齊不同std::array比內(nèi)置陣列。一個甚至可能需要這樣做的明顯例子是支持超對齊要求,例如與Intel SSE指令一起使用的數(shù)據(jù)。內(nèi)置數(shù)組不支持超對齊,但是我認(rèn)為的規(guī)范std::array可能不夠?qū)捤伞?/p>
底線:在不考慮可能存在多少可能性的問題的情況下,很明顯std::array不必一定要遵循您所要求的規(guī)則。

TA貢獻(xiàn)1895條經(jīng)驗 獲得超7個贊
實時示例(是的,這沒有什么證明。我仔細(xì)搜索了Standard,沒有發(fā)現(xiàn)任何聚合或文字類型的布局要求,僅是標(biāo)準(zhǔn)布局類型;以前的POD在C ++ 03中具有這些要求。
- 2 回答
- 0 關(guān)注
- 6909 瀏覽
添加回答
舉報