看一看:

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转换失败。

09-27 10:35