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

为何接收i32所有权的Rust函数需将参数声明为可变?

为什么Rust里给i32参数加mut才能修改?

你混淆了Copy trait和变量可变性这两个完全独立的概念:

  1. Copy trait的作用:
    i32实现Copy,只是意味着当你把它作为参数传递给函数时,会自动复制一份值给函数的参数绑定,而不是转移原变量的所有权。但这和参数能不能被修改没有任何关系。

  2. Rust的默认不可变性:
    Rust里所有变量(包括函数参数)默认都是不可变绑定,不管它是不是Copy类型。也就是说,一旦变量被初始化,你不能直接给它重新赋值,除非你在声明时加上mut关键字,明确告诉编译器这个变量的值可以被修改。

回到你的代码:
原函数里的a = a - b和b = b - a都是对参数变量的重新赋值操作,这属于修改变量的值。因为你没有给参数加mut,编译器会阻止这种修改——这是Rust的安全机制,防止意外修改变量。

而添加mut a: i32后,你是在告诉编译器:这个a是可变绑定,我可以在函数里修改它的值。这和Copy trait无关,只是在声明变量的可变性。

简单总结:Copy管的是值如何传递,mut管的是变量能不能被修改,两者互不影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:23:11