为什么我可以将负数分配给无符号整数变量?

Why can I assign a negative number to an unsigned integer variable?

为什么下面的 Rust 代码没有失败?!

fn main() {
    let a:usize = -2;
    assert!(a == -2);
}

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

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

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

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

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