筆試知識點 c 中sizeof(空類) 1

2021-07-29 13:11:25 字數 528 閱讀 2441

如題,看下面的示例**:

#include 

class x ;

int main()

列印結果是:

sizeof(x) = 1

a: 140729295724230

b: 140729295724231

可以看到,sizeof(x)居然不是0,而是1!!!

為什麼呢?

之前看過幾篇部落格,都說是為了讓物件能夠有唯一的位址以區別不同的物件,我就懵了,什麼意思呢?

直到今天看了《深度探索c++物件模型》這本書,我才恍然大悟,自己敲了上面那幾行**試了一下,果然!

這乙個位元組用來幹什麼的呢?裡面的值是多少無所謂,因為這個位元組只是用來佔位置而已,正如上面列印的ab的位址一樣,它們各自占用乙個byte的記憶體,緊挨著。我們可以通過位址的不同來區別它們。

其實這個問題本身沒什麼意義,只是**c++物件記憶體模型的乙個敲門磚,我自己覺得是挺有趣的~

C 空類知識點學習

1 概述。空類,是指編譯器不會生成任何成員函式的class。對於空類,編譯器不會生成任何的成員函式,只會生成1個位元組的佔位符。2 為何emptyclass佔一位元組呢?如果定義對emptyclass取sizeof 的值為0,那麼該空class例項化出100個物件時,在記憶體位址上就不能區分該cla...

C 筆試知識點複習(一)

1.scanf和printf 在c 中ide中,使用scanf和printf的效率比cin cout更高 用法 scanf d x 不同 scanf 3d x 設定輸入寬度,只取三位整數 printf 3d x 輸出至少三位,超過三位有多少,輸出多少 2.外部變數和內部變數,外部函式和內部函式 關鍵...

C 類 物件知識點

在類體內不允許對成員函式進行初始化。定義類時,類的資料成員不佔記憶體空間 但是,建立類的物件時,只為每個物件分配用於儲存資料成員的記憶體,不為函式成員分配記憶體。在定義類時,不能定義該類的變數,只能定義該類型別的指標成員和該類型別的引用成員。淺拷貝和深拷貝的區別 當類的資料成員是指標型別時,深拷貝能...