【发布时间】:2015-06-20 17:38:15
【问题描述】:
许多编译器提供 128 位整数类型,但我使用过的编译器都没有提供 typedef int128_t。为什么?
据我所知,标准
- 为此目的保留
int128_t - 鼓励提供此类类型的实现提供 typedef
- 要求此类实现提供至少 128 位的
intmax_t
(而且,我不相信我使用的实现实际上符合最后一点)
【问题讨论】:
-
标准无处要求必须将
__int128视为“扩展整数类型”。 -
您使用哪种语言?我很确定 C++ 标准没有说
intmax_t至少应为 128 位长,我怀疑 C 标准也有。 -
@Hurkyl:是的,实现提供了一个名为
__int128的东西,其行为类似于一个整数,但这并不意味着在intmax_t关心的意义上它是“真的”关于。另一方面,如果实现提供了int128_t,那么intmax_t必须至少有那么大。因此,一种可能的解释是,当禁用特定于编译器的扩展时,实现不希望intmax_t类型发生变化,但我不知道这是否是真正的原因。 -
如果编译器提供了扩展的整数类型,那么
intmax_t(或uintmax_t,视情况而定)必须能够表示它。但是编译器也可以提供一种不是扩展整数类型但行为类似于整数类型的类型。并且更改intmax_t的内容会破坏 ABI,因此实际上没有编译器将__int128视为扩展整数类型。 -
@T.C.:很不幸。在我看来,它违背了
intmax_t的目的。 C 代码不应该依赖于它具有特定的宽度。
标签: c++ c c++-standard-library c-standard-library