簡體   English   中英

可以`impl From<ZST> for &amp;&#39;static str` (static impl) 替換 `impl&lt;&#39;a&gt; 來自<ZST>對於 &amp;&#39;a str`(通用 impl)?

[英]Can `impl From<ZST> for &'static str` (static impl) replace `impl<'a> From<ZST> for &'a str` (generic 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
  }
}

我的問題是:

  • 它們完全一樣嗎? 如果不是,有什么區別?
  • 哪個版本需要更多的時間來編譯?

由於引用是不可變的並且處於返回位置,因此它們是相同的。 也就是說,您可以將&'static str分配給需要&'a str的變量,對於任何生命周期'a 同樣,它們中的任何一個都可以分配給需要較短生命周期的變量,因為具有較長生命周期的引用是子類型。

實際上, impl<'a> From<ZST> for &'a str實現impl<'a> From<ZST> for &'a str的唯一可能方法是返回一個靜態值。 那是因為它必須適用於任何'a ,並且唯一滿足的生命周期是'static

至於編譯時間的差異,永遠不會有太大的擔心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM