第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

標(biāo)準(zhǔn)定義的std :: array的大小是

標(biāo)準(zhǔn)定義的std :: array的大小是

C++
翻閱古今 2019-12-06 10:08:42
在C ++ 11 std::array中,連續(xù)存儲和性能的定義不比數(shù)組差,但是我無法確定標(biāo)準(zhǔn)的各種要求是否暗示std :: array具有與普通數(shù)組相同的大小和內(nèi)存布局?jǐn)?shù)組。那是您可以依靠的sizeof(std::array<int,N>) == sizeof(int)*N還是該實現(xiàn)特定的?特別是,這是否可以保證按照您期望的方式工作:std::vector< std::array<int, N> > x(M);typedef (*ArrayPointer)[N];ArrayPointer y = (ArrayPointer) &x[0][0];// use y like normal multidimensional array它可以在我嘗試過的兩個編譯器(GNU和Intel)中工作。此外,我可以找到的所有第三方文檔(像這樣)都指出std :: array與普通數(shù)組一樣具有高效的內(nèi)存,再加上連續(xù)的要求,則意味著它必須具有相同的內(nèi)存布局。但是我在標(biāo)準(zhǔn)中找不到此要求。
查看完整描述

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ī)則。


查看完整回答
反對 回復(fù) 2019-12-06
?
人到中年有點(diǎn)甜

TA貢獻(xiàn)1895條經(jīng)驗 獲得超7個贊

實時示例(是的,這沒有什么證明。我仔細(xì)搜索了Standard,沒有發(fā)現(xiàn)任何聚合或文字類型的布局要求,僅是標(biāo)準(zhǔn)布局類型;以前的POD在C ++ 03中具有這些要求。

查看完整回答
反對 回復(fù) 2019-12-06
  • 2 回答
  • 0 關(guān)注
  • 6909 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號