我在读用向量存储值列表章节。我试着用Attempting to add an element to a vector while holding a reference to an item
这个例子。
let mut _v: Vec<i32> = vec![2, 4, 6];
let _first = &_v[0];
_v.push(8);
println!("{:?}", _first);
按照预期的行为,它没有编译。根据这本书:-
当程序有一个有效的引用时,借用检查器强制执行所有权和借款规则(在第4章中),以确保此引用和任何其他对向量内容的引用仍然有效。回想一下这样一条规则:您不能在同一范围内拥有可变和不可变的引用。这个规则适用于清单8-7,其中我们保存了对向量中第一个元素的不可变引用,并尝试向末尾添加一个元素,这是行不通的。
但是,如果删除最后一条println
语句,上面的代码将编译。我无法理解println!
宏是如何影响上述语句的。
如果我遗漏了什么,请告诉我。
https://stackoverflow.com/questions/55719570
复制相似问题