为什么我可以为无符号整数变量赋一个负数?

时间:2015-01-25 13:56:08

标签: rust

为什么以下Rust-Code失败?!

fn main() {
    let a:usize = -2;
    assert!(a == -2);
}
  • 我希望编译时错误,因为我试图将有符号数分配给无符号变量。
  • 我也希望断言失败,因为a不能为负。

两者都没有发生,为什么?

编译器是否应该保护我免受常见溢出问题的影响?

1 个答案:

答案 0 :(得分:6)

到目前为止,Rust已经将整数类型的下溢和溢出的语义定义为环绕模2。因此,将-2赋值给无符号整数只是要求它的最大减去1。

这些语义是being challenged right now,它的要点是1.0下溢和溢出将产生一个未指定的值(可能panic!);尽管出于性能原因,测试仅在调试模式下是系统性的,默认情况下将在发布模式下禁用。

在这个新的方向上,考虑将一个负值分配给无符号整数是一个错误是合理的,我只能邀请你加入链接的RFC,以表达你的担忧。