四 sizeof用於類(C )

2021-10-09 13:23:44 字數 1380 閱讀 2380

內容參考於《21天學通c++》(第八版)

不去糾結c++的原理和細節,從c的角度去學習c++,再通過c++專案去加深理解

1. 示例-只算成員變數大小,不算方法
#include

#include

using

namespace std;

class

mystring

}mystring

(const mystring& copysource)

// copy constructor}~

mystring()

intgetlength()

const

char

*getstring()

};class

human

intgetage()

};intmain()

32位編譯器輸出

sizeof(mystring)

= 4sizeof(mansname)

= 4sizeof(womansname)

= 4sizeof(human)

= 12

sizeof(firstman)

= 12

sizeof(firstwoman)

= 12

64未編譯器輸出

sizeof(mystring)

= 8sizeof(mansname)

= 8sizeof(womansname)

= 8sizeof(human)

= 16

sizeof(firstman)

= 16

sizeof(firstwoman)

= 16

從中可知,將 sizeof( )用於類及其物件時,結果相同。 sizeof(mystring)和sizeof(mansname)的值相同,因為類占用的位元組數在編譯階段就已確定。雖然 mansname 包含 adam,而 womanname 包含 eve,但它們占用的位元組數相同,這沒什麼可奇怪的,因為儲存姓名的mystring::buffer 是乙個 char *,這是乙個大小固定的指標(在我使用的 32 位系統中,為 4 位元組),而與指向的資料量無關。將 sizeof( )用於 human 時,結果為 12。第 44~46 行表明, human 包含乙個 int 成員、乙個 bool成員和乙個 mystring 成員。要獲悉內建型別占用的位元組數,請參閱程式清單 3.4。從該程式清單可知,int 占用 4 位元組, bool 占用 1 位元組,而 mystring 占用 4 位元組。它們的總和與輸出中的 12 位元組不符,這是因為 sizeof( )的結果受字填充( word padding)和其他因素的影響。

C 類的大小 sizeof

先看這麼個問題 已知 class cbase 那麼執行cout sizeof cbase 這個應該很簡單,兩個成員變數所佔的大小有嘛 8。可由時候人就是愛犯這個錯誤 這麼簡單的問題人家會問你?再想想 好像c 類裡面有個什麼函式指標,也應該佔位元組吧!什麼指標來著?忘了 還是水平低不紮實 流汗中 算了...

C 類的大小 sizeof

先看這麼個問題 已知 那麼執行cout sizeof cbase 這個應該很簡單,兩個成員變數所佔的大小有嘛 8。可由時候人就是愛犯這個錯誤 這麼簡單的問題人家會問你?再想想 好像c 類裡面有個什麼函式指標,也應該佔位元組吧!什麼指標來著?忘了 還是水平低不紮實 流汗中 算了姑且認為是建構函式和析構...

C 空類sizeof不為0

初學者在學習物件導向的程式語言時,或多或少的都些疑問,我們寫的 與最終生編譯成的 卻 大相徑庭,我們並不知道編譯器在後台做了什麼工作 這些都是由於我們僅停留在語言層的原因,所謂語言層就是教會我們一些基本的語法法則,但不會告訴我們為什麼這麼做?今天和大家談的一點感悟就是我在學習程式設計過程中的一點經驗...