积分类型的C++大小

C++ sizeof integral types

本文关键字:C++ 大小 类型      更新时间:2023-10-16

我听过一些书,介绍了C/C++中积分类型的最小大小

以下大小以字节为单位:

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

但我在标准中找不到这些保证。那么,编译器是否需要任何保证来实现标准C++98/C++2003/C89/C99中定义的内容?

这是不对的,您的值乘以了8。(请注意,size为1并不一定意味着8个比特,字符中的比特数是CHAR_BIT,但很可能是8个)。

保证sizeof(char)1。(以及unsigned charsigned char)。

除此之外,

sizeof应用于任何其他基本类型(3.9.1)的结果为实现定义(5.3.3尺寸)

sizeof(char) <= sizeof(int) <= sizeof(long long)的行中存在订购限制。

因为没有。标准仅定义了一些关于价值的基本保证和要求。您可以在第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位长。CCD_ 24定义了CCD_。如今,几乎所有的体系结构都使用每字节8位,但一些较旧的体系结构过去使用7位。

以下是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个比特的