C ++ sizeof整数类型

时间:2015-04-20 12:40:35

标签: c++

我从书中听到过关于C / C ++中整数类型的最小尺寸的介绍

以下尺寸以字节为单位:

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

但我无法在标准中找到这些保证。 那么编译器是否需要保证在C ++ 98 / C ++ 2003 / C89 / C99标准中定义实现?

3 个答案:

答案 0 :(得分:6)

这不正确,你的值乘以8.(注意,sizeof 1并不一定意味着8位,char中的位数是CHAR_BIT - 很可能8虽然)。

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

除此之外,

  

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

sizeof(char) <= sizeof(int) <= sizeof(long long)符合排序限制。

答案 1 :(得分:2)

这里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位

答案 2 :(得分:2)

因为没有。标准仅定义了有关值的一些基本保证和要求。您可以在第33页找到它们in this document

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++: Fundamental Types

  

long long - 目标类型的宽度至少为64位。 (自C ++ 11起)

请注意,即使sizeof(char)保证为1,也不代表char为8位长。 CHAR_BIT定义char类型的位数。目前,几乎所有架构每个字节使用8位,但是一些旧架构过去常常使用7位。