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

for*_*emo 3 rust

为什么下面的Rust-Code没有失败?!

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

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

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

Mat*_* M. 6

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

那些语义现在正在受到挑战,它的要点是1.0下溢和溢出将产生一个未指定的值(并且可能panic!); 尽管出于性能原因,测试仅在调试模式下是系统性的,默认情况下将在发布模式下禁用.

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