'impl From for &'static str' (static impl) 可以代替 'impl<ZST><'a> From<ZST> for

  • 本文关键字:impl ZST static From for str rust lifetime
  • 更新时间 :
  • 英文 :


给定以下条件:

/// 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
}
}
我的问题是:

  • 他们就是吗?是一样的吗?如果不是,又有什么区别呢?
  • 哪个版本需要更多时间来编译?

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

实际上,实现impl<'a> From<ZST> for &'a str的唯一可能的方法是返回一个静态。这是因为它必须适用于任何'a,而满足这一条件的生命周期只有'static

至于编译时间的差异,它永远不会大到值得担心的程度。

相关内容

最新更新