簡體   English   中英

任何人都可以向我解釋為什么sizeof函數在下面的代碼中返回不同的值?

[英]Can anyone explain to me why the sizeof function returns different values in below code?

任何人都可以解釋為什么sizeof函數在下面的代碼中返回不同的值?

//static member
class one
{
  public :
  static const int a = 10;
};
//non static member
class two
{
  public :
  int a;
};
int main()
{
  cout << sizeof(one);       //print 1 to lcd
  cout << sizeof(two);       //print 4 to lcd,differ from size of one class
}

你應該學習的第一件事是sizeof不是一個函數,它是一個像+||的運算符

至於你的問題。 靜態成員變量實際上不是課堂以同樣的方式非靜態成員變量,所以只有靜態成員類將有大小為零。 但同時所有對象都需要可尋址,因此具有,這就是sizeof為第一堂課提供1原因。

one沒有非靜態成員,因此它的一個實例是空的。 靜態成員不包含在該類型的任何對象中,而是獨立於任何對象而存在。 它的大小為1而不是零,因為C ++不允許類型的大小為零(以確保不同的對象具有不同的地址)。

two確實有一個非靜態成員,因此實例必須足夠大才能包含該成員。 在您的情況下,其大小為4,與其int成員的大小相同。

靜態數據成員不存儲在類本身中,因此不會對類的sizeof有所貢獻。 我們可以通過轉到草案C ++標准部分9.4.2靜態數據成員來看到這一點:

靜態數據成員不是類的子對象的一部分。

one的大小為1 ,因為完整的對象應具有非零大小,從段9 ,其表示:

類類型的完整對象和成員子對象應具有非零大小。 106

注意, sizeof是一個操作符而不是一個函數。

one ,在計算類/對象的大小時不考慮靜態變量a

two中, a將被認為是,在這種情況下,等同於sizeof(int)

筆記:

  • sizeof是一個運算符,而不是一個函數。
  • 一類的大小可能不是0,因此,大小one必須是這樣,因而它的尺寸為1。

有關sizeof運算符的有用參考; http://en.cppreference.com/w/cpp/language/sizeof

注:原題的變量是towtwo

簡單的答案是, onetow是不同的類,大小不同。

tow包含int,我假設你的編譯器是4個字節。 我想你明白那一部分。

靜態成員不存在於類的每個實例中,但它是在所有類之間共享的全局變量。 因此,它不包括在班級規模中。 這是因為sizeof通常用於為對象分配內存,並且不需要為不在類實例中的變量分配內存。 這就是為什么one不是4個字節。

它是1字節的原因是因為C ++標准不允許類具有0字節的大小,因此編譯器已將其填充為非0大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM