c 空類的大小

2022-03-27 12:25:39 字數 800 閱讀 7727

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

那我們先看看乙個例子:

#include

class a {};

class b{};

class c:public a

private:   

int x;   

int g;   

class b{

public:

private:

int  data;

int data2;

static int xs;

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 與類中的建構函式,析構函式以及其他的成員函式無關.

C 空類大小

class a class b class c public a class d public b,public c 類a,b明明是空類,它的大小應該為為 為什麼 編譯器輸出的結果為 呢?這就是我們剛才所說的例項化的原因 空類同樣可以被例項化 每個例項在記憶體中都有乙個獨一無二的位址,為了達到這個目...

c 空類的大小

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

c 空類的大小

定義乙個空類,沒有資料 class empty class test2 private empty private繼承 class test3 public empty public繼承 int tmain int argc,tchar argv cout class test1 class tes...