首页 > 解决方案 > 可以从 `implfor &'static str` (static impl) 替换 `impl<'a> 来自对于 &'a str`(通用 impl)?

问题描述

鉴于以下条件:

/// Zero Sized Type
struct ZST;

/// What the ZST converts into
const TEXT: &str = "target text";

下面的代码片段做同样的事情,至少表面上是这样:

// static impl
impl From<ZST> for &'static str {
  fn from(_: ZST) -> &'static str {
    TEXT
  }
}
// generic impl
impl<'a> From<ZST> for &'a str {
  fn from(_: ZST) -> &'a str {
    TEXT
  }
}

我的问题是:

标签: rustlifetime

解决方案


由于引用是不可变的并且处于返回位置,因此它们是相同的。也就是说,您可以将 a 分配给&'static str需要 a&'a str的任何生命周期的变量'a。同样,这些中的任何一个都可以分配给需要较短生命周期的变量,因为具有较长生命周期的引用是子类型。

事实上,唯一可能的实现方式impl<'a> From<ZST> for &'a str是返回一个静态的。那是因为它必须适用于任何'a,并且唯一满足的生命周期是'static

至于编译时间的差异,它永远不会足够担心。


推荐阅读