gpt4 book ai didi

rust - 测试溢出时忽略 Cargo build --release 选项

转载 作者:行者123 更新时间:2023-12-03 11:33:21 26 4
gpt4 key购买 nike

我一直在逐步阅读 Programming Rust 书,并想观察两者的补码包装,如此简单的代码:

fn main() {

let mut x: u8 = 255;
println!("the value of x is {}", x) ;
x = 255 + 1 ;
println!("The value of x now is {}",x) ;
}
当我尝试按照指南使用 Cargo 编译它时,我运行
cargo 构建--发布
书中说会让它在没有溢出保护的情况下编译,但它不会编译。我收到保护错误
|
6 | x = 255 + 1 ;
| ^^^^^^^^^^^ 尝试计算 u8::MAX + 1_u8 , 会溢出
你能解释一下我做错了什么吗?

最佳答案

我相信在运行时不会动态检查该值(它不会 panic 并且会溢出),但在编译期间仍会静态检查(如果可能的话)。
在这种情况下,编译器能够在编译时确定您要执行的操作并阻止您执行此操作。
话虽如此,如果您查看编译器输出,您会看到以下消息:

note: #[deny(arithmetic_overflow)] on by default


无论优化级别如何,您都会看到此消息。
如果您想观察溢出,请输入以下 inner attribute在源文件的顶部。
#![allow(arithmetic_overflow)]
或者,如果您使用 rustc 进行编译您可以直接传递以下标志:
-O -A arithmetic_overflow
rustc文档显示默认情况下以下 lints 处于打开状态(无论优化级别如何)
  • ambiguous_related_items
  • 算术溢出
  • 冲突的_repr_hints
  • const_err
  • 病态属性输入
  • 不完整的包含
  • invalid_type_param_default
  • macro_expanded_macro_exports_accessed_by_absolute_paths
  • missing_fragment_specifier
  • 可变转换
  • no_mangle_const_items
  • order_dependent_trait_objects
  • 溢出文字
  • patterns_in_fns_without_body
  • pub_use_of_private_extern_crate
  • 软不稳定
  • 无条件 panic
  • unknown_crate_types
  • useless_deprecated
  • 关于rust - 测试溢出时忽略 Cargo build --release 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66484430/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com