我正在使用 64 位上的 GCC 编译 C++ 程序 - machine/OS/(-m64
选项传递给g++
)。正如预期的那样,sizeof(long double) == 16
我想知道整数是否有 16 字节长的标准类型?
据我了解, PS__int128_t
是一个模拟标准类型的人工扩展。除此之外我什么也没找到。
不,只有保证大小适用于char
, unsigned char
& signed char
,它们是1
:
5.3.3 大小[expr.sizeof]
1 sizeof 运算符产生其操作数的对象表示中的字节数。操作数要么是一个不求值的表达式,要么是一个带括号的类型 ID。sizeof 运算符不得应用于具有函数或不完整类型的表达式,或应用于所有枚举数已声明之前的枚举类型,或应用于此类类型的带括号的名称,或应用于指定位域的左值。sizeof(char)、sizeof(signed char) 和 sizeof(unsigned char) 为 1。 sizeof 应用于任何其他基本类型 (3.9.1) 的结果是实现定义的。[ 注意:特别是 sizeof(bool) 和 sizeof(wchar_t) 是实现定义的。74) —end note ] [ 注意:字节的定义见 1.7,对象表示的定义见 3.9。——尾注]
(强调我的)
c++ 标准没有标准化每种类型的大小(接受 char),而是标准化彼此之间的大小差异。
A char has to be 1 byte.
A short has to be >= to a char.
An int has to be >= to a short.
A long has to be >= to an int.
and a long long has to be >= to a long.
浮点类型也是如此。
我相信大多数编译器现在最多支持 8 字节整数
但是我知道一个事实,即使不是大多数,也没有 16 字节整数。
我还认为人们开发了一些对象类/结构来模拟一个 16 字节的整数,这些整数适用于大多数编译器。