內容參考於《21天學通c++》(第八版)1. 示例-只算成員變數大小,不算方法不去糾結c++的原理和細節,從c的角度去學習c++,再通過c++專案去加深理解
#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
初學者在學習物件導向的程式語言時,或多或少的都些疑問,我們寫的 與最終生編譯成的 卻 大相徑庭,我們並不知道編譯器在後台做了什麼工作 這些都是由於我們僅停留在語言層的原因,所謂語言層就是教會我們一些基本的語法法則,但不會告訴我們為什麼這麼做?今天和大家談的一點感悟就是我在學習程式設計過程中的一點經驗...