对于 Rust 中所有原始整数类型,
from_str_radix 方法将给定基数的字符串转换为整数,并将 u32 整数作为基数的参数。虽然该函数会在基数不在 [2,36] 范围内时引发 panic,但为什么 from_str_radix 不使用 u8 代替 u32 呢?因为一个 u8 已经可以存储比允许使用的最大基数还要大的整数。
类似的情况也会出现在其他整数方法中,例如 pow
。一个 u8
的最大值是 255
,而 2^255
已经大于 Rust 中可存储的最大整数类型 u128
的最大值,那么为什么 pow
函数使用 u32
,因为大多数 u32 的指数值会导致溢出?
u32
值可能保证为4字节对齐,这可能对内部操作很重要。另一个可能的解释是人们可能会使用计算结果为u32
的表达式进行调用,这将导致缩小转换。第三个选项是这是意外发生的。 - Bartek Banachewicz