编者注:这个问题来自1.0之前的Rust版本,并引用了Rust 1.0中不存在的一些项目。答案仍然包含有价值的信息。
什么是从(例如)usize
转换为u32
的惯用方式?
例如,使用4294967295us as u32
作品和Rust 0.12 reference docs on type casting说
数值可以转换为任何数字类型。原始指针值可以转换为任何整数类型或原始指针类型。任何其他强制转换都不受支持,无法编译。
但4294967296us as u32
将默默地溢出并给出0的结果。
我发现ToPrimitive
和FromPrimitive
提供了很好的功能,如to_u32() -> Option<u32>
,但它们被标记为不稳定:
#[unstable(feature = "core", reason = "trait is likely to be removed")]
什么是在数字(和指针)类型之间转换的惯用(和安全)方式?
isize
/ usize
的平台相关大小是我问这个问题的一个原因 - 原始场景是我想从u32
转换为usize
所以我可以代表Vec<u32>
中的一棵树(例如let t = Vec![0u32, 0u32, 1u32]
,然后获得盛大节点2的-parent将是t[t[2us] as usize]
),我想知道如果usize
小于32位它将如何失败。