正如你所注意到的,这个有intrinsics个,但这些是unsafe
个,使用起来有些烦人.
在Rust 1.0之前,标准库提供了包装器,可以检测CheckedAdd
、CheckedSub
、CheckedMul
和CheckedDiv
形式的4个算术运算的溢出.
从Rust 1.0开始,这些特性不再存在,每个数字类型都有固有的方法,比如i32::checked_add
.
但是,它们只会溢出detect次,不会返回溢出的结果:
fn main() {
println!("{:?}", 5u16.checked_add(65530u16));
println!("{:?}", 6u16.checked_add(65530u16));
}
输出:
Some(65535)
None