You can’t borrow a mutable reference to a read-only value.

回答 2 浏览 52 2022-11-20

几周前我买了本书Programming Rust: Fast, Safe Systems Development 2nd Edition,用来学习Rust。目前,我正在为&Tmut &T的话题而苦恼。

在这本书中,作者提到了以下有关参考资料的内容。

You can’t borrow a mutable reference to a read-only value.

它是什么意思?举个例子就好了。

softshipper 提问于2022-11-20
这意味着你永远无法从&T&mut T(安全)。例如,let x = &5; let y = &mut *x;不会被编译。isaactfa 2022-11-20
@isaactfa 不,你永远不可能从&T&mut T。期间。无论是否安全。Chayim Friedman 2022-11-20
也许一点上下文可以帮助我们理解作者的意思?Chayim Friedman 2022-11-20
@ChayimFriedman 但你可以cafce25 2022-11-20
@cafce25 您还“可以”创建数据竞争。但这是 UB(Miri也标记了这一点)。Chayim Friedman 2022-11-20
2 个回答
#1楼 已采纳
得票数 4

您不能执行以下操作:

let a = 99;
let b = &mut a;
cafce25 提问于2022-11-20
如果这就是这本书的意思,那就太脆弱了。将值移动到可变绑定仍然可以让您改变它。Chayim Friedman 2022-11-20
#2楼
得票数 0

在 Rust 中,变量默认是不可变的。 您只能将变量借用为可变的如果这些变量本身声明为可变的。

考虑这个例子:

let x = 42;
let mut y = 42;
let _a = &x;  // This is fine
let _b = &mut x; // This is NOT 
let _c = &y;  // This is fine (even though y is mut)
let _d = &mut y;  // This is fine

另请注意,不可能有对可变变量的标准(不可变)引用的可变引用。例子:

let mut y = 42;
let r = &y;  // This is fine
let m = &mut r;  // This is NOT (cannot borrow `r` as mutable, as it is not declared as mutable)
at54321 提问于2022-11-20
at54321 修改于2022-11-20
标签