Swift具有整数溢出算术函数,该函数返回一个标志,指示数字是否溢出.我们在 rust 迹中也有同样的东西吗?

推荐答案

正如你所注意到的,这个有intrinsics个,但这些是unsafe个,使用起来有些烦人.

在Rust 1.0之前,标准库提供了包装器,可以检测CheckedAddCheckedSubCheckedMulCheckedDiv形式的4个算术运算的溢出.

从Rust 1.0开始,这些特性不再存在,每个数字类型都有固有的方法,比如i32::checked_add.

但是,它们只会溢出detect次,不会返回溢出的结果:

fn main() {
    println!("{:?}", 5u16.checked_add(65530u16));
    println!("{:?}", 6u16.checked_add(65530u16));
}

(playground)

输出:

Some(65535)
None

Rust相关问答推荐

如何从使用mockall模拟的方法中返回self?

如何导出 rust 色二进制文件中的符号

我如何在Rust中使用传递依赖中的特征?

当两者都有效时,为什么Rust编译器建议添加';&;而不是';*';?

如何将像烫手山芋一样不透明的值从一个Enum构造函数移动到下一个构造函数?

我如何制作一个变异迭代器来锁定内部数据直到删除?

`Pin`有没有不涉及不安全代码的目的?

获取与父字符串相关的&;str的原始片段

Rust ndarray:如何从索引中 Select 数组的行

在为第三方 struct 实现第三方特征时避免包装器的任何方法

处理带有panic 的 Err 时,匹配臂具有不兼容的类型

当推送到 HashMap 中的 Vector 时,类型 `()` 无法取消引用

将泛型中的 Box 转换为 rust 中的 Box

sha256 摘要仅适用于 &*

为什么带有生命周期指定的方法不能被调用两次?

强制特征仅在 Rust 中的给定类型大小上实现

将一片字节复制到一个大小不匹配的数组中

为什么这个闭包没有比 var 长寿?

如何在不设置精度的情况下打印浮点数时保持尾随零?

在 Rust 中组合特征的不同方法是否等效?