可变引用生命周期不变性:对Rustonomicon表述的疑问
Rustonomicon子类型与方差的理解疑惑
此外,我们发现不能将
&mut &'a U视为&mut &'b U的子类型,因此可以说&mut T对T是不变的(重点为原文所加)。
上述结论源自以下示例:
fn assign<T>(input: &mut T, val: T) { *input = val; } fn main() { let mut hello: &'static str = "hello"; { let world = String::from("world"); assign(&mut hello, &world); } println!("{hello}"); // use after free 😿 }
该章节随后明确指出&mut &'a T对'a是协变的。基于示例,**难道不应说&mut &'a T对'a是不变的吗?**毕竟'static是'world的子类型,但&mut &'static str无法赋值给&mut &'world str,而“&mut T对T是不变的”结论似乎不成立。究竟是《Rustonomicon》有误,还是我的理解偏差?
更新:@kmdreko指出,《Rustonomicon》实际声称&'a mut T对'a是协变的,这与“&mut &'a T对'a是协变的”是不同概念。
内容的提问来源于stack exchange,提问作者Alessandro Power
相关产品推荐
相关产品推荐

