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

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

C / C ++中的并集大小

C / C ++中的并集大小

C++ C
BIG陽 2019-11-18 18:12:18
C / C ++中的并集大小是多少?它里面最大的數(shù)據(jù)類型的大小嗎?如果是這樣,如果聯(lián)合的較小數(shù)據(jù)類型之一處于活動狀態(tài),編譯器如何計算如何移動堆棧指針?
查看完整描述

3 回答

?
HUX布斯

TA貢獻1876條經(jīng)驗 獲得超6個贊

該標準回答了C ++標準9.5節(jié)或C99標準第6.5.2.3節(jié)第5段(或C11標準的第6段或C18標準的6.7.2.1節(jié)第16段)中的所有問題:


在聯(lián)合中,最多可以在任何時間激活一個數(shù)據(jù)成員,即,最多可以在任何時間將一個數(shù)據(jù)成員的值存儲在一個聯(lián)合中。[注:為了簡化并集的使用,做出了一項特殊保證:如果POD聯(lián)合包含多個共享共同初始序列(9.2)的POD結(jié)構(gòu),并且此POD聯(lián)合類型的對象包含以下一個: POD結(jié)構(gòu),允許檢查任何POD結(jié)構(gòu)成員的公共初始序列;見9.2。聯(lián)合的大小足以容納其最大的數(shù)據(jù)成員。每個數(shù)據(jù)成員都被分配為好像它是結(jié)構(gòu)的唯一成員。


這意味著每個成員共享相同的存儲區(qū)域。這里是活躍在最一個成員,但你不能找出哪一個。您將不得不將有關(guān)當(dāng)前活動成員的信息自己存儲在其他地方。除了聯(lián)合以外,還存儲這樣的標志(例如,將具有整數(shù)作為類型標志的結(jié)構(gòu)并將聯(lián)合作為數(shù)據(jù)存儲區(qū))將為您提供所謂的“區(qū)分聯(lián)合”:知道哪種類型的聯(lián)合它目前是“活躍的”。


詞法分析器的一種常見用法是,您可以具有不同的令牌,但是根據(jù)令牌的不同,您可以存儲不同的信息(放入line每個結(jié)構(gòu)以顯示常見的初始序列是什么):


struct tokeni {

    int token; /* type tag */

    union {

        struct { int line; } noVal;

        struct { int line; int val; } intVal;

        struct { int line; struct string val; } stringVal;

    } data;

};

該標準允許您訪問line每個成員,因為這是每個成員的共同初始序列。


存在一些編譯器擴展,這些擴展允許訪問所有成員,而不管當(dāng)前存儲了其值的成員。這樣可以有效地重新解釋每個成員之間具有不同類型的存儲位。例如,以下內(nèi)容可用于將float變量分解為2個無符號短褲:


union float_cast { unsigned short s[2]; float f; };

在編寫低級代碼時,這可能非常方便。如果編譯器不支持該擴展名,但是您仍然這樣做,則編寫未定義結(jié)果的代碼。因此,如果使用該技巧,請確定您的編譯器對此有支持。


查看完整回答
反對 回復(fù) 2019-11-18
?
撒科打諢

TA貢獻1934條經(jīng)驗 獲得超2個贊

一個a union總是占用最大成員的空間?,F(xiàn)在使用什么都沒關(guān)系。


union {

  short x;

  int y;

  long long z;

}

上面的一個實例union將始終至少需要a long long進行存儲。


附注:由于注意到斯特凡諾,實際空間的任何類型(union,struct,class)將采取不依賴于其他問題,如編譯器對齊。我并不是為了簡單起見,因為我只想告訴我工會考慮了最大的項目。重要的是要知道實際大小確實取決于alignment。


查看完整回答
反對 回復(fù) 2019-11-18
  • 3 回答
  • 0 關(guān)注
  • 615 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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