具有父类型生存期的引用不能用于子类型生存期

时间:2018-12-29 16:09:26

标签: rust

我正在努力了解终生子类型的工作原理。名称subtype告诉我,如果'b'a的子类型,那么'a类型的事物可以在任何'b类型的事物中使用。用过的。而且实际上,在有生之年的背景下,我看不出允许这样做会导致什么问题。但是,以下代码

fn test<'a, 'b: 'a>(first: &'a mut str, second: &'b mut str) -> &'b str {
    // do something to choose between the two arguments,
    // eventually pick first on some branch
    first
}

不起作用,因为“这两种类型声明了不同的生存期...但是来自first的数据在这里流入second。”

那么,如果允许这样做会出什么问题?

1 个答案:

答案 0 :(得分:1)

  

那么,如果允许这样做会出什么问题?

在此示例中,您的推理被颠倒了:约束'b: 'a读为'b的生存期限为'a 。由于test的输出至少需要生存 到生命周期'b,因此'a仍然表示生命周期可能不兼容,并且{{1} }实际上寿命可能不够长。

如果将生命周期缩短,那么代码将进行编译。

first