我的默认Rust启用了整数溢出保护,并在溢出时暂停执行中的程序。大量算法需要溢出才能正常工作(SHA1,SHA2等)
答案 0 :(得分:4)
使用Wrapping
类型,或直接使用wrapping functions。这些禁用溢出检查。 Wrapping
类型允许您照常使用普通运算符。
此外,当您在"发布"中编译代码时模式(例如cargo build --release
),省略溢出检查以提高性能。不要依赖于此,使用上面的类型或函数,以便代码甚至可以在调试版本中工作。
答案 1 :(得分:1)
Francis Gagné's answer绝对是您案件的正确答案。但是,我会说有一个编译器选项来禁用溢出检查。我没有看到任何理由使用它,但它存在并且可能也是如此:
use std::u8;
fn main() {
u8::MAX + u8::MAX;
}
编译并运行:
$ rustc overflow.rs
$ ./overflow
thread '<main>' panicked at 'arithmetic operation overflowed', overflow.rs:4
$ rustc -Z force-overflow-checks=no overflow.rs
$ ./overflow
$