我很难理解如何实现以下目标:我想引用一个我不能更改的向量,包含我可以更改的数据(c++T*const等价(这在rust语法中可以实现吗?
let mut a = Vec::new()
a.push(1) // should be allowed
a = Vec::new() // should be disallowed.
mut似乎允许在两个级别上的可变性
这:
let mut a = Vec::new()
不创建对矢量的引用;相反,它创建了一个绑定到向量本身的变量。它相当于C++中的
std::vector<int> a;
如果你想要一个对可变向量的不可变引用,你会有这样的东西:
let mut a = vec![1,2,3];
let r = &mut a;
r.push(4);
在上面的代码片段中,r
是一个不可变变量,绑定到可变向量a
的引用。如果您试图重新分配r
作为另一个矢量的参考:
let mut b = vec![4,5,6];
r=&mut b;
r.push(7);
你会得到这个错误:
9 | r=&mut b;
| ^^^^^^^^ cannot assign twice to immutable variable
游乐场
然而,请注意,由于Rust允许阴影,您可以使用"let"创建一个新绑定,对同一范围内的旧绑定进行阴影处理,因此您可以这样做:
let mut a = vec![1, 2, 3];
let r = &mut a;
r.push(4);
let mut b = vec![4, 5, 6];
let r = &mut b;
r.push(7);