在标准库中,Cow以不同的方式实现AsRef和Borrow。
在AsRef中,它返回self
impl<T: ?Sized + ToOwned> AsRef<T> for Cow<'_, T> {
fn as_ref(&self) -> &T {
self
}
}在Borrow中,它返回&**self
impl<'a, B: ?Sized> Borrow<B> for Cow<'a, B>
where
B: ToOwned,
<B as ToOwned>::Owned: 'a,
{
fn borrow(&self) -> &B {
&**self
}
}这差别很重要吗?
发布于 2022-11-05 00:07:49
两者之间没有明显的差别,它们可以毫无问题地交换。前者使用隐式deref强制,后者使用显式取消引用。两者都能够将&Cow<'_, T>转换为&T,因为Cow实现了Deref。
https://stackoverflow.com/questions/74323768
复制相似问题