簡體   English   中英

C ++ sizeof整數類型

[英]C++ sizeof integral types

我從書中聽到過有關C / C ++整數類型的最小尺寸的介紹

以下大小以字節為單位:

  • sizeof(char) >= 1
  • sizeof(short) >= 2
  • sizeof(long) >= 4
  • sizeof(long long) >= 8

但是我在標准中找不到這些保證。 那么,對於實現標准C ++ 98 / C ++ 2003 / C89 / C99中定義的編譯器,是否需要保證?

這是不正確的,您的值將乘以8。(請注意,sizeof 1不一定表示8位,char中的位數是CHAR_BIT盡管很可能是8位)。

sizeof(char)保證為1 (以及unsigned charsigned char )。

除此之外,

sizeof應用於任何其他基本類型(3.9.1)的結果是實現定義的。 (5.3.3 Sizeof)

沿着sizeof(char) <= sizeof(int) <= sizeof(long long)的行有排序限制。

這是The C++ Programming Language Fourth Edition by Bjarne Stroustrup對此事的看法。

C ++對象的大小以char大小的倍數表示,因此根據定義, char的大小為1。

• 1 ≡ sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long)
• 1 ≤ sizeof(bool) ≤ sizeof(long)
• sizeof(char) ≤ sizeof(wchar_t) ≤ sizeof(long)
• sizeof(float) ≤ sizeof(double) ≤ sizeof(long double)
• sizeof(N) ≡ sizeof(signed N) ≡ sizeof(unsigned N)

在最后一行, N可以是charshortintlonglong long 此外,確保char至少具有8位, short至少16位, long至少32位

因為沒有。 標准僅定義了一些關於值的基本保證和要求。 您可以在第33頁的文檔中找到它們:

5.2.4.2.1整數類型的大小。

您可以確定:

sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long)

sizeof(float) ≤ sizeof(double) ≤ sizeof(long double)

也:

  • sizeof(char)保證為1
  • sizeof(char) == sizeof(signed char) == sizeof(unsigned char)

此外,在大多數平台上:

  • sizeof(char) = 1
  • sizeof(short) = 2
  • sizeof(int) = 4
  • sizeof(long) = 4
  • sizeof(long long) = 8 (1)

(1) long long不是標准類型。 GCC和VC ++已經支持了很長時間,但是C ++ 11附帶了官方支持:

C ++:基本類型

long long目標類型的寬度至少為64位。 (自C ++ 11起)

注意,即使將sizeof(char)保證為1 ,也並不意味着char是8位長。 CHAR_BIT定義char類型的位數。 如今,幾乎所有體系結構每字節都使用8位,但是某些較舊的體系結構以前每字節使用7位。

暫無
暫無

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

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