积分类型的C++大小
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。(请注意,size为1并不一定意味着8个比特,字符中的比特数是CHAR_BIT
,但很可能是8个)。
保证sizeof(char)
为1
。(以及unsigned char
和signed 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)
保证为1sizeof(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
可以是char
、short
、int
、long
或long long
。此外,保证char
具有至少8个比特,short
具有至少16个比特,并且long
具有至少32个比特的
- C++字符*缓冲区的大小
- 在C++中手动调整数组大小
- 用C++20 fmt限制结果的总大小
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 在UNIX系统中使用DIR查找文件的字节大小
- 调整大小后指向元素值的指针unordered_map有效?
- C++数组传递给大小为的函数
- 具有最大子序列大小的序列,每个元素都相同
- Boost Graph Library,修复节点大小
- 如何找到大小'x'数组是否完全填充,在C++?
- QTableView:endMoveRows在模型中重置水平页眉大小
- 大小相等但成员数量不同的结构之间的性能差异
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 在c++中获取大文件的大小
- 为什么我不能将 rand() 与数组的大小一起使用?
- 类型总是使用其大小存储在内存中吗
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 在C++中传递给函数时,为什么要指定数组大小作为参数
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 使用.find函数在c++中查找字符和另一个字符之间的大小