You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中值与引用比较的惯用实现方法是什么?

Rust中值与引用比较的惯用方式

先看这段意图判断3字节字符串是否等于b"foo"的Rust函数:

fn is_foo(value: [u8; 3]) -> bool {
    value == b"foo"
}

这段代码无法编译,编译器报错:

error[E0277]: can't compare [u8; 3] with &[u8; 3]

编译器明确指出不能直接将[u8; 3]类型的值和&[u8; 3]类型的引用做比较。目前能实现正确比较的两种写法是:

  • 将值转为引用:&value == b"foo"
  • 将引用解引用为值:value == *b"foo"

从C++背景(值与引用几乎等价)出发,会觉得这两种写法都有些别扭,那Rust里比较值与引用的最惯用方式是什么?


在Rust的惯用写法里,更推荐使用&value == b"foo"这种将值转为引用的方式,原因如下:

  1. 性能更优:解引用字符串字面量*b"foo"会触发数组的拷贝操作,而取value的引用&value只是创建一个指向原数据的引用,没有任何拷贝开销,效率更高。
  2. 语法更统一:Rust中很多标准库API(比如集合的contains方法)都接受引用类型作为参数,使用引用进行比较能和这类场景的写法保持一致,让代码风格更连贯。

需要注意的是,Rust中引用和值的语义差异远大于C++:Rust的引用是严格的借用指针,带有明确的生命周期约束;而C++的引用更接近变量的别名,这也是两者写法不同的核心原因。

内容的提问来源于stack exchange,提问作者Daniel Wolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:50:24