struct Person {
age: u8
}
我想简单得创建一个Person的引用的集合
let mut person_list: Vec<&Person> = vec![];
person_list.push(&Person { age: 21 });
person_list.push(&Person { age: 11 });
上面的写法是可以的。但是如果使用借用的话:
let mut person_list: Vec<&mut Person> = vec![];
person_list.push(&mut Person { age: 21 });
person_list.push(&mut Person { age: 11 });
就会报temporary value is freed at the end of this statement
错误
person_list.push(&mut Person { age: 21 });
| ^^^^^^^^^^^^^^^^^^ - temporary value is freed at the end of this statement
| |
| creates a temporary which is freed while still in use
49 | person_list.push(&mut Person { age: 11 });
| ----------- borrow later used here
我想请问一下,为什么第一种方法,我传了临时值的引用却不会报错,但是传临时值的借用却不行??谢谢
还有就是
fn get_person<'a>() -> &'a Person {
return &Person { age: 21 };
}
如果我这样调用的话,我返回了一个函数内部临时变量的引用,但是没问题,好像编译器把这个不可变引用的生命周期给提升了。
fn get_person<'a>() -> &'a mut Person {
return &mut Person { age: 21 };
}
但是返回&mut就会报错了,另我比较疑惑。
1
共 2 条评论, 1 页
评论区
写评论理解了,感谢
--
👇
yct21:
这里应该是发生了 constant promotion,
如果写成以下方式的话,会出现编译错误:
第二个同理
这里应该是发生了 constant promotion,
如果写成以下方式的话,会出现编译错误:
第二个同理