在rust中使用u32整数类型

对于 Rust 中的所有原始整数类型,from_str_radix将给定基数的字符串转换为整数的方法将u32整数作为基数的参数。鉴于如果基数不在范围内[2, 36],函数会发生恐慌,为什么不from_str_radix使用 au8代替 a u32,因为 au8已经可以存储比最大允许基数更大的整数?

这种事情也发生在其他整数方法中,例如pow. a的最大值u8255并且2^255已经大于 a u128(Rust 中最大的整数类型)可以存储的最大值,那么为什么pow函数采用 a u32,因为u32指数的大多数值都会导致溢出?

回答

Per Niko in #22240(强调):

这些是我们打算在标准库中遵循的准则。这些指南并不打算作为在标准库之外使用的通用指南(当然,人们可能会选择这样做)。

  1. 如果值应始终大于或等于零,则使用无符号值,否则使用有符号值。
  2. 对于与大小与内存大小成正比的数据结构相关联的索引、指针或其他值,请使用usizeisize
  3. 对于值的可接受域完全适合固定位数的情况,请使用适当的固定大小类型。例如,像write_u16这样的方法会接受一个u16参数。
  4. 否则,i32/u32如果值的范围很窄,则使用i64/u64否则使用。

例子:

  • 向量索引和哈希图长度使用 usize.
  • 文件的大小将是 u64,因为的最大大小与可寻址内存无关。
  • 像这样的东西write_u16需要u16(令人震惊,我知道!)
  • 整数的基数将使用u32.
    • 您可能会期望u8,因为大于 256 的基数没有用,但有用基数的域实际上比 小得多u8,因此使用u8并不能提供有意义的保证,只会增加摩擦。

以上是在rust中使用u32整数类型的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>