为什么我可以将负数分配给无符号整数变量?
Why can I assign a negative number to an unsigned integer variable?
为什么下面的 Rust 代码没有失败?!
fn main() {
let a:usize = -2;
assert!(a == -2);
}
- 我预计会出现编译时错误,因为我正在尝试将有符号数分配给无符号变量。
- 我也希望断言失败,因为
a
不能为负。
两者都没有发生,为什么?
编译器不应该保护我免受常见溢出问题的影响吗?
到目前为止,Rust 已经将整数类型的下溢和上溢语义定义为环绕模 2。因此,将 -2
分配给无符号整数只是要求它的最大值减一。
这些语义是 being challenged right now,其要点是对于 1.0 下溢和上溢将产生一个未指定的值(可能 panic!
);尽管出于性能原因,测试仅在调试模式下是系统的,在发布模式下默认情况下将被禁用。
在这个新方向上,将负值分配给无符号整数是一种错误是合理的,我只能邀请您加入链接的 RFC 以表达您的担忧。
为什么下面的 Rust 代码没有失败?!
fn main() {
let a:usize = -2;
assert!(a == -2);
}
- 我预计会出现编译时错误,因为我正在尝试将有符号数分配给无符号变量。
- 我也希望断言失败,因为
a
不能为负。
两者都没有发生,为什么?
编译器不应该保护我免受常见溢出问题的影响吗?
到目前为止,Rust 已经将整数类型的下溢和上溢语义定义为环绕模 2。因此,将 -2
分配给无符号整数只是要求它的最大值减一。
这些语义是 being challenged right now,其要点是对于 1.0 下溢和上溢将产生一个未指定的值(可能 panic!
);尽管出于性能原因,测试仅在调试模式下是系统的,在发布模式下默认情况下将被禁用。
在这个新方向上,将负值分配给无符号整数是一种错误是合理的,我只能邀请您加入链接的 RFC 以表达您的担忧。