0

(我正在使用 Rust 1.44.1)

以下示例由于算术溢出而无法构建(调试模式)(我明白为什么):

fn main() {
    let i: u8 = 255 + 1;
}
error: this arithmetic operation will overflow
 --> src/main.rs:2:17
  |
2 |     let i: u8 = 255 + 1;
  |                 ^^^^^^^ attempt to add with overflow
  |
  = note: `#[deny(arithmetic_overflow)]` on by default

虽然此示例正确构建:

fn main() {
    let i: u8 = 255;
    let _j: u8 = i + 1;
}

由于i它是不可变的,因此我预计会出现与第一个示例相同的错误。

我错过了什么或者这是编译器没有处理的东西吗?

4

1 回答 1

2

首先,应该注意的是,警告是在尽力而为的基础上发出的。

一般来说,一个好的警告策略是:

  • 为了避免误报:对于用户来说,没有什么比在没有问题时被警告有问题更烦人的了。
  • 因此可能有误报:本应触发警告但未检测到的情况。

此外,出于性能考虑,分析可能仅限于最基本的模式,这再次意味着无法检测到某些事件。


话虽如此,警告在Rust 1.45上被正确触发。

结果,我相信您只是遇到了 1.44.1 版本的限制。

于 2020-07-23T13:32:47.443 回答