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如此严格?