程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> sizeof的作用——解釋類中與類之外static變量的情況

sizeof的作用——解釋類中與類之外static變量的情況

編輯:C++入門知識

  今天看程序員面試寶典的時候遇到一個問題,書上有這麼一句話:sizeof計算棧中分配的大小。咋一看這句話的時候,很不理解,難道像函數中類似於static、extern const類型的變量的sizeof都是0?

  本著實踐出真知的原則,我測試了一下:

static int s = 10;

extern const int h = 10;

void main()

{

    cout << sizeof(s) <<endl<<sizeof(h)<< endl;

    getchar();

}

輸出結果:

4

4

  結果和書上所說明顯不符,再仔細看書,發現這句話的上下文是類中,確實,當sizeof計算類的大小的時候,是不考慮static這種共享成員的。

class A1

{

public:

    A1():d(10){};

    int a;

    char c;

    const int d;

    static int b;

};

void main()

{

    A1 x;

    int *p = (int *)&(x.d);

    *p = 20;

    cout << sizeof(A1)<<endl;

    getchar();

}

輸出結果:

12

  雖然書上說的是有上下文情境的,但我覺得很容易誤導讀者,所以,在此,我就根據資料和我自己的理解來對sizeof做個說明:

  sizeof的本質是得到某個類型的大小,確切的來說就是當創建這個類型的一個對象(或變量)的時候,需要為它分配的空間的大小。而類也可以理解為類似於int、float這樣的一種類型,當類中出現static成員變量的時候,static成員變量是存儲在靜態區當中的,它是一個共享的量,因此,在為這個類創建一個實例對象的時候,是無需再為static成員變量分配空間的,所以,這個類的實例對象所需要分配的空間是要排除static成員變量的,於是,當sizeof計算類的大小的時候會忽略static成員變量的大小。

  根據上述我所提出的解釋,就能說明static變量不在類中的時候,用sizeof得到的大小為什麼不是0了,因為static不在類中的時候,為static類型(static int等等)定義一個變量的時候,是必須要分配空間的,所以sizeof計算得到的就是為這個類型的 變量分配的空間的大小。

  如有不足,還請各位指正!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved