为什么以下Rust-Code失败?!
fn main() {
let a:usize = -2;
assert!(a == -2);
}
a
不能为负。 两者都没有发生,为什么?
编译器是否应该保护我免受常见溢出问题的影响?
答案 0 :(得分:6)
到目前为止,Rust已经将整数类型的下溢和溢出的语义定义为环绕模2。因此,将-2
赋值给无符号整数只是要求它的最大减去1。
这些语义是being challenged right now,它的要点是1.0下溢和溢出将产生一个未指定的值(可能panic!
);尽管出于性能原因,测试仅在调试模式下是系统性的,默认情况下将在发布模式下禁用。
在这个新的方向上,考虑将一个负值分配给无符号整数是一个错误是合理的,我只能邀请你加入链接的RFC,以表达你的担忧。