初學者在學習物件導向的程式語言時,或多或少的都些疑問,我們寫的**與最終生編譯成的**卻 大相徑庭,我們並不知道編譯器在後台做了什麼工作.這些都是由於我們僅停留在語言層的原因,所謂語言層就是教會我們一些基本的語法法則,但不會告訴我們為什麼這麼做?今天和大家談的一點感悟就是我在學習程式設計過程中的一點經驗,是編譯器這方面的乙個具體功能.
首先:我們要知道什麼是類的例項化,所謂類的例項化就是在記憶體中分配一塊位址.
那我們先看看乙個例子:
#include
class a {};
class b{};
class c:public a;
class d:public b,public c{};
int main()
;class b;
int b::data1=0;
void mian()
void f(int x);
class b;
int b::xs=0;
void main(){
a s(10);
s.f(10);
cout<<"sozeof(a)"<10 ,
sizeof(a) 8
sizeof(b) 8
它們的結果均相同,可以看出類的大小與它當中的建構函式,析構函式,以及其他的成員函式無關,只與它當中的成員資料有關.
從以上的幾個例子不難發現類的大小:
1.為類的非靜態成員資料的型別大小之和.
2.有編譯器額外加入的成員變數的大小,用來支援語言的某些特性(如:指向虛函式的指標).
3.為了優化訪問效率,進行的邊緣調整.
4 與類中的建構函式,析構函式以及其他的成員函式無關.
sizeof空型別不為空
乙個類的例項化物件所佔空間的大小?注意不要說類的大小 是類的物件的大小 首先,類的大小是什麼?確切的說,類只是乙個型別定義,它是沒有大小可言的。用sizeof 運算子對乙個型別名操作,得到的是具有該型別實體的大小。如果class a a obj 那麼sizeof a sizeof obj 那麼siz...
為什麼C 空類的大小不為0?
先上 include class emptyclass int main int argc,tchar argv 輸出結果 the sizeof emptyclass is 1 請按任意鍵繼續.首先,在c 中,空類同樣是可以進行例項化的,這是乙個前提。既然可以進行例項化,每個例項在記憶體中就的有乙個...
sizeof 類大小,空類大小
乙個類的例項化物件所佔空間的大小?注意不要說類的大小,是類的物件的大小.首先,類的大小是什麼?確切的說,類只是乙個型別定義,它是沒有大小可言的。用sizeof運算子對乙個型別名操作,得到的是具有該型別實體的大小。如果 class a a obj 那麼sizeof a sizeof obj 那麼siz...