面试题答案
一键面试Rust默认情况下处理算术溢出
在Rust中,默认情况下,在debug模式下算术溢出会导致程序panic。例如:
fn main() {
let x: u8 = u8::MAX;
let y = x + 1; // 在debug模式下,这里会panic
}
在release模式下,溢出会被无声地截断,不会产生运行时错误。
使用checked_*
函数显式处理溢出
checked_*
系列函数在发生溢出时返回None
,否则返回结果的Some
。例如:
fn main() {
let x: u8 = u8::MAX;
let result = x.checked_add(1);
match result {
Some(val) => println!("结果: {}", val),
None => println!("发生溢出"),
}
}
应用场景:适用于需要精确检测并处理溢出情况的场景,如金融计算,需要确保数值的准确性,不允许数据丢失。
使用wrapping_*
函数显式处理溢出
wrapping_*
系列函数在发生溢出时会进行环绕处理。例如:
fn main() {
let x: u8 = u8::MAX;
let result = x.wrapping_add(1);
println!("结果: {}", result); // 结果为0
}
应用场景:适用于对溢出行为有预期,并且希望以环绕方式继续计算的场景,如循环缓冲区,不需要额外的错误处理,按特定逻辑环绕处理即可。