国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++空類及沒有成員變量的類的大小實例分析

2020-05-23 14:22:39
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C++空類及沒有成員變量的類的大小,對于初學者更好的了解C++的指針及類的存儲結構很有幫助,需要的朋友可以參考下
 
 

眾所周知的C++中空類的大小為1,但是除了空類之外的其他一些沒有成員變量的類的大小,還是有相當一部分開發人員對此有很多不明之處的。

這里我們以如下代碼為例:

#includeusing namespace std;class a {};class b{};class c :public a{virtual void fun() = 0;};class d :public b, public c{};int main(){cout << "sizeof(a)" << sizeof(a) << endl;cout << "sizeof(b)" << sizeof(b) << endl;cout << "sizeof(c)" << sizeof(c) << endl;cout << "sizeof(d)" << sizeof(d) << endl;getchar();return 0;}

程序執行的輸出結果為:

sizeof(a)=1sizeof(b)=1sizeof(c)=4sizeof(d)=8

為什么會出現這種結果呢?初學者肯定會對此疑惑不解,類a,b明明是空類,它的大小應該為為0,為什么編譯器輸出的結果為1呢?這就是我們剛才所說的實例化的原因(空類同樣可以被實例化),每個實例在內存中都有一個獨一無二的地址,為了達到這個目的,編譯器往往會給一個空類隱含的加一個字節,這樣空類在實例化后在內存得到了獨一無二的地址,所以a,b的大小為1。

而類c是由類a派生而來,它里面有一個純虛函數,由于有虛函數的原因,有一個指向虛函數表的指針(vptr,有多個虛函數仍然是只有一個指針),在32位的系統分配給指針的大小為4個字節,所以最后得到c類的大小為4

類d的大小更是會讓很多的初學者疑惑,類d是由類b,c派生而來的,它的大小應該為二者之和5,為什么卻是8呢?這是因為為了提高實例在內存中的存取效率,內存中會有數據對齊,于是類的大小往往被調整到4字節的整數倍。并采取就近的法則,往大的方向取最近的倍數,就是該類的大小,所以類d的大小為8個字節(假如d由3個空類和c派生而來,仍然是8)。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桑日县| 德州市| 宁国市| 达州市| 赤壁市| 山东省| 绥芬河市| 贺兰县| 周口市| 叶城县| 辽中县| 长岛县| 黑河市| 象山县| 揭西县| 盐边县| 河津市| 永寿县| 贞丰县| 丹巴县| 蓝山县| 诸暨市| 晴隆县| 青海省| 绥棱县| 枞阳县| 敦煌市| 兴安盟| 铜梁县| 长武县| 泸西县| 崇礼县| 肇州县| 永康市| 青河县| 玉溪市| 印江| 河北区| 修水县| 贵定县| 兰坪|