亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2014年07月15日 10:45:26   投稿:shichen2014  
這篇文章主要介紹了C++空類及沒有成員變量的類的大小,對(duì)于初學(xué)者更好的了解C++的指針及類的存儲(chǔ)結(jié)構(gòu)很有幫助,需要的朋友可以參考下

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

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

#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ì)對(duì)此疑惑不解,類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ù)對(duì)齊,于是類的大小往往被調(diào)整到4字節(jié)的整數(shù)倍。并采取就近的法則,往大的方向取最近的倍數(shù),就是該類的大小,所以類d的大小為8個(gè)字節(jié)(假如d由3個(gè)空類和c派生而來,仍然是8)。

相關(guān)文章

  • C++ 中pragma once 與 #ifndef _XXX_H_ #define _XXX_H_的區(qū)別

    C++ 中pragma once 與 #ifndef _XXX_H_ #define _XXX_H_的區(qū)別

    這篇文章主要介紹了C++ 中pragma once 與 #ifndef _XXX_H_ #define _XXX_H_的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C語(yǔ)言實(shí)現(xiàn)酒店管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)酒店管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • MFC程序執(zhí)行過程深入剖析

    MFC程序執(zhí)行過程深入剖析

    這篇文章主要介紹了MFC程序執(zhí)行過程,包括對(duì)MFC執(zhí)行流程的分析以及斷點(diǎn)調(diào)試分析出的SDI程序執(zhí)行流程,需要的朋友可以參考下
    2014-09-09
  • pcre函數(shù)詳細(xì)解析

    pcre函數(shù)詳細(xì)解析

    PCRE提供了19個(gè)接口函數(shù),為了簡(jiǎn)單介紹,使用PCRE內(nèi)帶的測(cè)試程序(pcretest.c)示例用法
    2013-09-09
  • C++中新手容易犯的十種編程錯(cuò)誤匯總

    C++中新手容易犯的十種編程錯(cuò)誤匯總

    一段C語(yǔ)言代碼,在編譯、鏈接和運(yùn)行的各個(gè)階段都可能會(huì)出現(xiàn)問題,下面這篇文章主要給大家介紹了關(guān)于C++中新手容易犯的十種編程錯(cuò)誤的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Define,const,static用法總結(jié)

    Define,const,static用法總結(jié)

    const定義的全局?jǐn)?shù)據(jù)變量,其基本作用和define相同,但又在define的基礎(chǔ)上增加了好多功能
    2013-10-10
  • C++ new/delete相關(guān)知識(shí)點(diǎn)詳細(xì)解析

    C++ new/delete相關(guān)知識(shí)點(diǎn)詳細(xì)解析

    C語(yǔ)言用一堆標(biāo)準(zhǔn)庫(kù)函數(shù)malloc和free在自由存儲(chǔ)區(qū)中分配存儲(chǔ)空間,而C++則用new和delete表達(dá)式實(shí)現(xiàn)相同的功能
    2013-09-09
  • OpenCV實(shí)現(xiàn)圖像切割功能

    OpenCV實(shí)現(xiàn)圖像切割功能

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)圖像切割功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C語(yǔ)言指針詳解

    C語(yǔ)言指針詳解

    這篇文章非常詳細(xì)的講解了C語(yǔ)言中指針的概念,包含多種方法,多種定義,全面的說明了C語(yǔ)言的特性
    2021-06-06
  • 解決C++全局變量只能初始化不能賦值的問題

    解決C++全局變量只能初始化不能賦值的問題

    今天小編就為大家分享一篇解決C++全局變量只能初始化不能賦值的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07

最新評(píng)論