给定一个实现trait T
的结构体S
,为什么Box<S>
不能实现Borrow<dyn T>
?
我本以为下面的代码可以编译通过,但实际上不行:
trait T{}
struct S{}
impl T for S{}
fn f1(s: &S) -> &dyn T {
s
}
fn f2(s: &Box<S>) -> &dyn T {
std::borrow::Borrow::borrow(s)
}
为什么f1
能编译通过,而f2
不能?(在第一种情况下,从&S
到&dyn T
的转换被执行了,而在第二种情况下没有执行)。