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
。目前,我正在为&T
和mut &T
的话题而苦恼。
在这本书中,作者提到了以下有关参考资料的内容。
You can’t borrow a mutable reference to a read-only value.
它是什么意思?举个例子就好了。
这意味着你永远无法从
&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
@cafce25 您还“可以”创建数据竞争。但这是 UB(Miri也标记了这一点)。
- Chayim Friedman 2022-11-20
2 个回答
#1楼
已采纳
得票数 4
您不能执行以下操作:
let a = 99;
let b = &mut a;
如果这就是这本书的意思,那就太脆弱了。将值移动到可变绑定仍然可以让您改变它。
- 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)