【发布时间】:2020-10-31 02:04:02
【问题描述】:
看看:
use std::convert::{From, TryFrom};
fn main() {
let size: usize = 42;
let good: u128 = u128::try_from(size).unwrap(); // works fine
let bad: u128 = u128::from(size); // doesn't compile!
}
据我所知,usize 是一个整数类型,它们永远不会超过 128 位。因此,我认为usize -> u128 转换不会失败。那么,为什么u128 不实现From<usize>?
更新:Rust 的 documentation 说:
From T for U 意味着 Into U for T
虽然usize -> u128 看起来不错,但u128 -> usize 却不行。好的,但是为什么不为usize 实现Into<u128> 呢?
【问题讨论】:
-
usize是指针的大小。 理论上你可以拥有一个地址空间需要超过 128 位来寻址的系统......总有一天。未来的证明? ;-) -
“From T for U 意味着 Into U for T”在这种情况下,这意味着
usize -> u128和u128 <- usize都可以。它没有提到u128 -> usize。
标签: error-handling rust type-conversion size unsigned