[英]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 char
和signed 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
可以是char
, short
, int
, long
或long 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附帶了官方支持:
long long
目標類型的寬度至少為64位。 (自C ++ 11起)
注意,即使將sizeof(char)
保證為1
,也並不意味着char
是8位長。 CHAR_BIT
定義char
類型的位數。 如今,幾乎所有體系結構每字節都使用8位,但是某些較舊的體系結構以前每字節使用7位。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.