【问题标题】:Arithmetic overflow expected but does not occur预计算术溢出但未发生
【发布时间】:2020-07-23 13:25:34
【问题描述】:

(我使用的是 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 是不可变的,我预计会出现与第一个示例相同的错误。

我是否遗漏了什么或者这是编译器未处理的东西?

【问题讨论】:

    标签: rust arithmetic-overflow


    【解决方案1】:

    首先,应注意发出警告尽最大努力。

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

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

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


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

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

    【讨论】:

    • 我应该在发布之前更新我的 Rust 版本...感谢您的回答!
    • 顺便说一句,要完全正确,这不是警告而是错误。
    • @norbjd: arithmetic_overflow 是一个警告(lint);您可以选择将其报告为错误,使用拒绝,但它不会改变其性质(作为警告),因此它只是在尽力而为的基础上报告的事实。跨度>
    猜你喜欢
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2021-07-21
    相关资源
    最近更新 更多