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
的定义:
类型是一个实现定义的无符号整型,其大小足以容纳任何对象的字节数。
C99 §7.18.1.5对uintmax_t
的定义(通过规范引用包含在C++中):
以下类型指定了一种无符号整数类型,能够表示任何无符号整数类型的值:
uintmax_t
uintmax_t
是最大的无符号整数类型,而 size_t
是一种无符号整数类型,通过推断,我们可以说 uintmax_t
必须能够容纳 size_t
的所有值。 - Xeouintmax_t
定义的C99章节号码吗?我没有副本。谢谢。 - Joseph Mansfield
std::size_t
是(错误地)带符号的。因此:虽然不总是这样,但它仍将映射到唯一值,因此您可以来回切换而没有问题。更可能的是,size_t
比uintmax_t
短。 - Dave