
#[warn(unused_parens)] fn main() { let mut a: u8 = 199; if (a > 2) // 改成 a <2 就正常了 { a += 199; } println!("{}", a); } 程序直接退出了。应该是运行时检测的,好奇是怎么实现的(如果加法都有判断的话,运行时怎么保持高性能),有木有大佬解释下?
1 lzoje 2024-11-26 09:47:01 +08:00 debug 版本会检测,release 版本不检测的。https://doc.rust-lang.org/stable/book/ch03-02-data-types.html#integer-overflow |
2 gwy15 2024-11-26 09:56:47 +08:00 via iPhone 硬件支持的话,溢出时 cpu 会设置寄存器 flag ,加一行 jmpne 就可以了 |
3 datadump OP 理解了,感谢 2 位老总~~~ |