error-handling - 为什么 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
呢?
解决方案
虽然 usize -> u128 看起来不错,但 u128 -> usize 却不行。好的,但是为什么不为 usize 实现 Into 呢?
因为就 Rust 而言,虽然 usize 保证始终至少为 16 位,但不能保证始终最多为64 位。
它似乎不太可能有用,但从技术上讲,没有什么可以排除 256 位指针,并且由于 usize 保证是指针大小的,它会使usize -> u128
转换失败。
推荐阅读
- xml - 元素 'xxx' 无效、错位或出现太频繁
- scrapy - 无论如何在执行时停止 Splash 脚本?
- mysql - 基本 MySQL Docker 容器
- sql - 当前状态基于周数 ORACLE
- c# - 如果发生错误,如何绕过 RunWorkerCompleted 事件中的代码?
- c++ - 类中的字符串没有命名类型
- java - Angular1:如何将多个对象作为请求主体传递?
- firebase - Firebase 深层链接的 APNS 推送通知结构
- python - Python:更改矩阵中的行和列
- r - 从 Ubuntu 上的 Microsoft 机器学习服务器安装 Microsoft R Open 时,如何升级它?