欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

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

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語言|點(diǎn)擊: 次

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

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

#include
using 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;
}

程序執(zhí)行的輸出結(jié)果為:

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

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

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

類d的大小更是會(huì)讓很多的初學(xué)者疑惑,類d是由類b,c派生而來的,它的大小應(yīng)該為二者之和5,為什么卻是8呢?這是因?yàn)闉榱颂岣邔?shí)例在內(nèi)存中的存取效率,內(nèi)存中會(huì)有數(shù)據(jù)對齊,于是類的大小往往被調(diào)整到4字節(jié)的整數(shù)倍。并采取就近的法則,往大的方向取最近的倍數(shù),就是該類的大小,所以類d的大小為8個(gè)字節(jié)(假如d由3個(gè)空類和c派生而來,仍然是8)。

上一篇:C++指向函數(shù)的指針實(shí)例解析

欄    目:C語言

下一篇:C++讀取INI配置文件類實(shí)例詳解

本文標(biāo)題:C++空類及沒有成員變量的類的大小實(shí)例分析

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3622.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有