簡體   English   中英

為什么 String -> &str 在 Deref 和 AsRef 的實現中不同?

[英]Why is String -> &str different in the impl for Deref and AsRef?

為什么ops::DerefString轉換為&strAsRef不同?

這是ops::Deref的實現

impl ops::Deref for String {
    type Target = str;

    #[inline]
    fn deref(&self) -> &str {
        unsafe { str::from_utf8_unchecked(&self.vec) }
    }
}

這與AsRef不同,

impl AsRef<str> for String {
    #[inline]
    fn as_ref(&self) -> &str {
        self
    }
}

.as_ref().deref()之間有什么區別

由於類型強制規則,您可以在詢問&str的地方放置一個&String

&T or &mut T to &U if T implements Deref<Target = U>

在這種情況下, TStringUstr

 impl ops::Deref for String { type Target = str; #[inline] fn deref(&self) -> &str { unsafe { str::from_utf8_unchecked(&self.vec) } } }

如您所見,此規則依賴於特征Deref 這就是 @user4815162342 所說as_ref() relies on deref() to do the actual work

有關類型強制的更多信息,請參閱強制類型

暫無
暫無

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

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