空類的大小為什麼是1?

2021-06-18 20:15:13 字數 774 閱讀 9745

1、c++編譯器不允許物件為零長度。試想乙個長度為0的物件在記憶體中怎麼存放?怎麼獲取它的位址?為了避免這種情況,c++強制給這種類插入乙個預設成員,長度為1。如果有自定義的變數,變數將取代這個預設成員。

2、c++位元組對齊的結果是大小總是佔最大空間的型別的倍數,例如含有double,則為8的倍數,class a則sizeof(a)=24;class a},則sizeof(a)=32。(vs2008下測試)因而將占用位元組小的型別寫在前面類的大小就會變小:class a double b;},則sizeof(a)=24。virtual函式可以看作是最大型別的倍數,不管它的位置在哪。若類中有結構體,則最大型別要與結構體裡的具體型別比較得出。

3、c++中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。

對c++ 了解的人都應該知道虛函式(virtual function)是通過一張虛函式表(virtual table)來實現的。簡稱為v-table。在這個表中,主是要乙個類的虛函式的位址表,這張表解決了繼承、覆蓋的問題,保證其容真實反應實際的函式。這樣,在有虛函式的類的例項中這個表被分配在了這個例項的記憶體中,所以,當我們用父類的指標來操作乙個子類的時候,這張虛函式表就顯得由為重要了,它就像乙個地圖一樣,指明了實際所應該呼叫的函式。如圖所示:

3、帶有虛函式的物件自身確實插入了一些指標資訊,而且這個指標資訊並不隨著虛函式的增加而增大。

為什麼C 空類的大小不為0?

先上 include class emptyclass int main int argc,tchar argv 輸出結果 the sizeof emptyclass is 1 請按任意鍵繼續.首先,在c 中,空類同樣是可以進行例項化的,這是乙個前提。既然可以進行例項化,每個例項在記憶體中就的有乙個...

char 大小 空類的大小

通過菱形繼承關係討論在繼承體系中不同繼承的情況,base類和derive類的尺寸。class類之間的關係,用圖表示如下 在普通public繼承的體系下,上述繼承關係如下 在這種繼承體系下,所有的derived類都以public的形式繼承自base類。通過程式得到不同平台下的大小 繼承體系下所有的em...

空類或結構的大小為1

我以為我會寫一些關於此的文章,因為在論壇中經常會問它乙個問題。首先,這是乙個c 問題,建立沒有成員的類嚴格違反c的規則。這是有道理的,因為沒有資料成員和虛函式的結構或類的唯一真正用途是作為派生其他 類和結構的基礎,或作為非虛擬方法的容器。發生這種情況的原因歸結為正確實施該標準,c 標準說的一件事是 ...