Rust项目测试报错:无法比较&usize与整数的问题咨询
关于Rust中usize比较报错的问题解答
问题1:结构体中的Vec是否因特殊内存分配使用usize而非普通整数?
不是Vec的内存分配导致的,这是Rust的语言设计规范:
usize是与当前平台指针宽度匹配的无符号整数类型(32位系统对应32位,64位系统对应64位),专门用来表示内存地址、容器长度这类和内存布局直接相关的值。- 所有标准容器(包括
Vec)的len()方法返回值都是usize,这和结构体无关——只要调用Vec::len(),得到的就一定是usize,不管这个Vec是在结构体里还是单独声明的。
问题2:是否该继续尝试将usize转为普通整数?
完全没必要,这种做法既不优雅也不安全(比如64位系统下大的usize转成i32可能会溢出)。你需要做的是修正比较逻辑本身:
- 报错
can't compare &usize with integer的核心原因是你在比较**usize的引用**和整数字面量,而非usize本身。比如错误代码可能类似:// 错误示例:拿len的引用和整数比较 assert!(&board.columns[0].len() > 5); - 正确的处理方式:
- 去掉引用,直接使用
len()的返回值比较:assert!(board.columns[0].len() > 5); - 若确实需要处理
usize的引用,先解引用再比较:let len_ref = &board.columns[0].len(); assert!(*len_ref > 5);
- 去掉引用,直接使用
- Rust会自动推断整数字面量的类型,直接写
5即可和usize比较,不需要额外转换。如果想更明确,也可以写成5usize。
内容的提问来源于stack exchange,提问作者wavesinaroom
相关产品推荐
相关产品推荐

