Avatar ·

usize与u32在Rust中的区别?何时使用哪个?

大家好!我几周前开始学习Rust,遇到了一个困惑点。在《The Rust Programming Language》书中,我经常看到使用`usize`类型来表示索引和长度,但也遇到了`u32`。我不明白它们之间的根本区别。 例如,我写了一个简单的程序来遍历向量元素: ```rust fn main() { let v = vec![10, 20, 30, 40, 50]; // 选项1:使用u32 for i in 0..v.len() as u32 { println!("{}", v[i as usize]); } // 选项2:使用usize for i in 0..v.len() { println!("{}", v[i]); } } ``` 第一个选项可以工作,但我不得不做很多类型转换:`as u32`和`as usize`。第二个选项无需转换就能工作。但我听说`u32`占用更少内存,可能更高效。这是真的吗? 我还注意到,如果我写`let x: usize = 42;`并尝试与`u32`相加,编译器会报错。为什么Rust如此严格?