如何安全地和惯用地在数字类型之间进行转换?

问题描述 投票:29回答:1

编者注:这个问题来自1.0之前的Rust版本,并引用了Rust 1.0中不存在的一些项目。答案仍然包含有价值的信息。

什么是从(例如)usize转换为u32的惯用方式?

例如,使用4294967295us as u32作品和Rust 0.12 reference docs on type casting

数值可以转换为任何数字类型。原始指针值可以转换为任何整数类型或原始指针类型。任何其他强制转换都不受支持,无法编译。

4294967296us as u32将默默地溢出并给出0的结果。

我发现ToPrimitiveFromPrimitive提供了很好的功能,如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位它将如何失败。

casting rust numbers
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.