C++标准是否保证std :: uintmax_t可以保存std :: size_t的所有值?

Joh*_*and 22 c++ c++11

C++标准是否保证(通过明确说明或通过逻辑推导隐式)std::uintmax_t可以保存所有值std::size_t

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

Jos*_*eld 30

是.

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

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

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

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

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

uintmax_t
Run Code Online (Sandbox Code Playgroud)

  • 对.通过*definition*,`uintmax_t`是*最大的*无符号整数类型,`size_t`是***无符号整数类型 - 通过演绎,我们可以说`uintmax_t`*必须*能够保存所有的值` size_t`. (7认同)
  • C99中的7.18.1.5节(C2011中的7.20.1.5). (5认同)