为什么没有int128_t?
许多编译器都提供了128位的整数types,但是我用过的都没有提供int128_t
。 为什么?
据我记得,标准
- 储备
int128_t
为此目的 - 鼓励提供这种types的实现提供typedef
- 规定这种实现提供至less128位的
intmax_t
(而且,我不相信我已经使用了一个实际符合最后一点的实现)
我会参考C标准; 我认为C ++标准从Cinheritance了<stdint.h>
/ <cstdint>
的规则。
我知道gcc实现了128位有符号和无符号整数,在某些平台上使用__int128
和unsigned __int128
( __int128
是一个实现定义的关键字)。
即使对于提供标准128位types的实现,标准也不需要定义int128_t
或uint128_t
。 引用C标准N1570草案的第7.20.1.1节:
这些types是可选的。 但是,如果一个实现提供宽度为8,16,32或64位的整数types,没有填充位,并且(对于有符号types)有二进制补码表示,则它应该定义相应的typedef名称。
C允许实现定义的扩展整数types,其名称是实现定义的关键字。 gcc的__int128
和unsigned __int128
与标准定义的扩展整数types非常相似 – 但是gcc并没有这样处理它们。 相反,它把它们当作语言的延伸。
特别是,如果__int128
和unsigned __int128
是扩展的整数types ,那么gcc需要将intmax_t
和uintmax_t
定义为这些types(或至less128位宽的某些types)。 它不这样做; 相反, intmax_t
和uintmax_t
只有64位。
在我看来,这是不幸的,但我不相信这会让gcc不合格。 没有可移植的程序可以依赖__int128
的存在,或者任何宽于64位的整数types。