为了账号安全,请及时绑定邮箱和手机立即绑定

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

在变量名之前和“:”之后放置“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>) { /* ... */ }
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

如果你是来自C / C ++,那么基本上这样想也可能会有所帮助:


// Rust          C/C++

    a: &T     == const T* const a; // can't mutate either

mut a: &T     == const T* a;       // can't mutate what is pointed to

    a: &mut T == T* const a;       // can't mutate pointer

mut a: &mut T == T* a;             // can mutate both

你会注意到这些是彼此的反转。C / C ++采用“黑名单”方法,如果你想要某些东西是不可变的,你必须明确地说,而Rust采用“白名单”方法,如果你想要一些可变的东西,你必须明确说出来。


查看完整回答
反对 回复 2019-07-24
  • 2 回答
  • 0 关注
  • 528 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信