6

我正在使用 64 位上的 GCC 编译 C++ 程序 - machine/OS/(-m64选项传递给g++)。正如预期的那样,sizeof(long double) == 16我想知道整数是否有 16 字节长的标准类型?

据我了解, PS__int128_t是一个模拟标准类型的人工扩展。除此之外我什么也没找到。

4

2 回答 2

2

不,只有保证大小适用于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。——尾注]

(强调我的)

于 2012-09-18T23:02:41.953 回答
1

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 字节的整数,这些整数适用于大多数编译器。

于 2016-05-29T00:20:01.707 回答