23

C++ 标准是否保证(通过明确说明或通过逻辑推论隐含)std::uintmax_t可以保存std::size_t?

或者是否有可能std::numeric_limits<std::size_t>::max()大于std::numeric_limits<std::uintmax_t>::max()

4

1 回答 1

32

是的。

size_t被定义为一个无符号整数类型,其大小足以包含任何对象的大小。uintmax_t被定义为能够存储任何无符号整数类型的任何值。因此,如果size_t可以存储它,uintmax_t可以存储它。

size_t来自 C++11 §18.2的定义:

size_t 类型是实现定义的无符号整数类型,它大到足以包含任何对象的字节大小。

来自 C99 §7.18.1.5的定义uintmax_t(通过规范性参考包含在 C++ 中):

以下类型指定了一个无符号整数类型,能够表示任何无符号整数类型的任何值:

uintmax_t
于 2013-04-04T23:08:25.403 回答