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

Does the C++ standard guarantee that std::uintmax_t can hold all values of std::size_t?

本文关键字:std size 保存 是否 uintmax 标准 c++      更新时间:2023-10-16

c++标准是否保证(通过显式声明或通过逻辑推导隐式)std::uintmax_t可以保存std::size_t的所有值?

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

可以。

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

c++ 11§18.2中size_t的定义:

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

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

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

uintmax_t