首页 > 解决方案 > 为什么 Rust 的 usize 到 u128 转换被认为是失败的?

问题描述

看一看:

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 的文档说:

From T for U 意味着 Into U for T

虽然usize -> u128看起来不错,u128 -> usize其实不然。好的,但是为什么不Into<u128>实施usize呢?

标签: error-handlingrusttype-conversionsizeunsigned

解决方案


虽然 usize -> u128 看起来不错,但 u128 -> usize 却不行。好的,但是为什么不为 usize 实现 Into 呢?

因为就 Rust 而言,虽然 usize 保证始终至少为 16 位,但不能保证始终最多为64 位。

它似乎不太可能有用,但从技术上讲,没有什么可以排除 256 位指针,并且由于 usize 保证是指针大小的,它会使usize -> u128转换失败。


推荐阅读