看一看:
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说:
尽管
usize -> u128
看起来不错,但u128 -> usize
却不行。好的,但是为什么不为Into<u128>
实现usize
呢? 最佳答案
因为就Rust而言,虽然保证usize始终至少为16位,但不能保证始终始终为64位。
似乎不太可能有用,但从技术上讲,没有什么可以排除256位指针,并且由于保证usize是指针大小的,因此会使usize -> u128
转换失败。