在变量名之前和“:”之后放置“mut”有什么区别?

在变量名之前和“:”之后放置“mut”有什么区别?

这是我在Rust文档中看到的两个函数签名:

fn modify_foo(mut foo: Box<i32>) { *foo += 1; *foo }fn modify_foo(foo: &mut i32) { *foo += 1; *foo }

为什么不同的位置mut

似乎第一个函数也可以声明为

fn modify_foo(foo: mut Box<i32>) { /* ... */ }


米琪卡哇伊
浏览 529回答 2
2回答

婷婷同学_

如果你是来自C / C ++,那么基本上这样想也可能会有所帮助:// Rust&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; C/C++&nbsp; &nbsp; a: &T&nbsp; &nbsp; &nbsp;== const T* const a; // can't mutate eithermut a: &T&nbsp; &nbsp; &nbsp;== const T* a;&nbsp; &nbsp; &nbsp; &nbsp;// can't mutate what is pointed to&nbsp; &nbsp; a: &mut T == T* const a;&nbsp; &nbsp; &nbsp; &nbsp;// can't mutate pointermut a: &mut T == T* a;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// can mutate both你会注意到这些是彼此的反转。C / C ++采用“黑名单”方法,如果你想要某些东西是不可变的,你必须明确地说,而Rust采用“白名单”方法,如果你想要一些可变的东西,你必须明确说出来。
打开App,查看更多内容
随时随地看视频慕课网APP