rust - 遍历 u8 的所有值时出现文字超出范围警告

标签 rust

<分区>

据我所知,for 循环中的范围是包含下限和排除上限。这在以下代码中引入了一个问题:

fn main() {
    let a: u8 = 4;

    for num in 0..256 {
        if num == a {
            println!("match found");
            break;
        }
    }
}

我想从 0 到 255 循环 256 次,这符合 u8 支持的数据范围。但是由于范围是不包括上限的,我必须给 256 作为进程 255 的限制。因此,编译器给出以下警告。

warning: literal out of range for u8
 --> src/main.rs:4:19
  |
4 |     for num in 0..256 {
  |                   ^^^
  |
  = note: #[warn(overflowing_literals)] on by default

当我执行它时,程序会跳过 for 循环。

在我看来,编译器必须忽略该范围内的 256 并将该范围接受为 u8 范围。这是对的吗?还有其他方法可以给出范围吗?

最佳答案

您可以组合迭代器来创建完整的 u8 范围:

use std::iter::once;
for i in (0..255).chain(once(255)){
    //...
}

在 nightly Rust 中你可以使用 inclusive range :

#![feature(inclusive_range_syntax)]
for i in 0...255 {
    //...
}

关于rust - 遍历 u8 的所有值时出现文字超出范围警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40421277/

相关文章:

string - 如何将整数转换为字符串?

rust - 在 polars rust 中使用 groupby 时如何避免深度复制?

rust - Rust中的整数转换

rust - 如何使用Serde在结构中反序列化json格式的结构数组?

struct - 递归打印 struct in `fmt::Display`

testing - 有没有办法检测是否从 Rust 中的测试调用了代码?

memory - 为什么 ?Sized 是某些 RefCell 函数的边界,但不是全部?

rust - 将jni::sys::JNIEnv转换为ffi中定义的JNINativeInterface

rust - 如何将多个args传递给rust封闭-预期的封闭需要1个参数

rust - 如何从产生数据 block 的慢速处理侧线程流式传输 super 请求的主体?