为什么没有int128_t?

许多编译器都提供了128位的整数types,但是我用过的都没有提供int128_t 。 为什么?

据我记得,标准

  • 储备int128_t为此目的
  • 鼓励提供这种types的实现提供typedef
  • 规定这种实现提供至less128位的intmax_t

(而且,我不相信我已经使用了一个实际符合最后一点的实现)

我会参考C标准; 我认为C ++标准从Cinheritance了<stdint.h> / <cstdint>的规则。

我知道gcc实现了128位有符号和无符号整数,在某些平台上使用__int128unsigned __int128__int128是一个实现定义的关键字)。

即使对于提供标准128位types的实现,标准也不需要定义int128_tuint128_t 。 引用C标准N1570草案的第7.20.1.1节:

这些types是可选的。 但是,如果一个实现提供宽度为8,16,32或64位的整数types,没有填充位,并且(对于有符号types)有二进制补码表示,则它应该定义相应的typedef名称。

C允许实现定义的扩展整数types,其名称是实现定义的关键字。 gcc的__int128unsigned __int128与标准定义的扩展整数types非常相似 – 但是gcc并没有这样处理它们。 相反,它把它们当作语言的延伸。

特别是,如果__int128unsigned __int128扩展的整数types ,那么gcc需要将intmax_tuintmax_t定义为这些types(或至less128位宽的某些types)。 它不这样做; 相反, intmax_tuintmax_t只有64位。

在我看来,这是不幸的,但我不相信这会让gcc不合格。 没有可移植的程序可以依赖__int128的存在,或者任何宽于64位的整数types。