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

Rust中为何*value += how_much与*value += *how_much两种写法均有效?

Rust中引用直接参与+=运算的原因

你碰到的这个情况,本质是Rust为了简化代码,给基本类型做了两项贴心设计:

  • 针对引用的运算符重载实现
    Rust的+=运算符对应AddAssign trait,标准库不仅给i32实现了接受i32参数的AddAssign,还额外实现了接受&i32参数的版本。标准库里的核心实现逻辑大概是这样:

    // 接受值类型的实现
    impl AddAssign<i32> for i32 {
        fn add_assign(&mut self, rhs: i32) {
            *self = *self + rhs;
        }
    }
    
    // 接受引用类型的实现
    impl AddAssign<&i32> for i32 {
        fn add_assign(&mut self, rhs: &i32) {
            *self += *rhs;
        }
    }
    

    当你写*value += how_much时,编译器会自动匹配到第二个接受引用的实现,帮你完成内部的解引用操作,所以你不用手动写*how_much也能正常运行。

  • Deref强制转换的辅助作用
    另外,&i32类型实现了Deref trait,编译器在需要i32类型的上下文里,会自动把&i32解引用成i32。就算没有上面的引用版运算符实现,编译器也会通过Deref自动把how_much转成i32,让代码正常编译。

两种写法(加不加*)都是完全合法的,最终效果没有任何区别——只是Rust帮你省了手动解引用的步骤而已。

内容的提问来源于stack exchange,提问作者Vraj Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:37:03