在rust中使用u32整数类型
对于 Rust 中的所有原始整数类型,from_str_radix将给定基数的字符串转换为整数的方法将u32整数作为基数的参数。鉴于如果基数不在范围内[2, 36],函数会发生恐慌,为什么不from_str_radix使用 au8代替 a u32,因为 au8已经可以存储比最大允许基数更大的整数?
这种事情也发生在其他整数方法中,例如pow. a的最大值u8是255并且2^255已经大于 a u128(Rust 中最大的整数类型)可以存储的最大值,那么为什么pow函数采用 a u32,因为u32指数的大多数值都会导致溢出?
回答
Per Niko in #22240(强调):
这些是我们打算在标准库中遵循的准则。这些指南并不打算作为在标准库之外使用的通用指南(当然,人们可能会选择这样做)。
- 如果值应始终大于或等于零,则使用无符号值,否则使用有符号值。
- 对于与大小与内存大小成正比的数据结构相关联的索引、指针或其他值,请使用
usize或isize。- 对于值的可接受域完全适合固定位数的情况,请使用适当的固定大小类型。例如,像
write_u16这样的方法会接受一个u16参数。- 否则,
i32/u32如果值的范围很窄,则使用,i64/u64否则使用。例子:
- 向量索引和哈希图长度使用
usize.- 文件的大小将是
u64,因为的最大大小与可寻址内存无关。- 像这样的东西
write_u16需要u16(令人震惊,我知道!)- 整数的基数将使用
u32.
- 您可能会期望
u8,因为大于 256 的基数没有用,但有用基数的域实际上比 小得多u8,因此使用u8并不能提供有意义的保证,只会增加摩擦。