看一下:
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的文档中说:
尽管从T到U意味着从U到T的Into
usize -> u128
看起来没问题,但u128 -> usize
不行。好吧,但为什么没有为usize
实现Into<u128>
呢?
usize
是指针的大小。理论上,你可能需要一个寻址空间超过128位的系统……也许将来会有这样的系统。这是未雨绸缪的做法,哈哈。 - T.J. Crowderusize -> u128
和u128 <- usize
都可以。它并不涉及u128 -> usize
。 - mcarton