`impl Foo for Foo` 的目的是什么?

what's the purpose of `impl Foo for Foo`?

我正在寻找为什么大小特征不是对象安全的答案,例如:

trait Foo:Sized{}

Foo 不是对象安全的。

我读过一些关于对象安全的帖子,比如object-safety and sizedness-in-rust。我发现深层原因是编译器自动 impl Foo for Foo.

我很困惑为什么编译器会这样做以及为什么这会导致 Foo 对象不安全?

非常感谢。

impl Foo for Foo 是用 Rust 编写“为特征对象 Foo 实现特征 Foo”的方式。如果此特征的特征对象实现了特征,则特征只能是对象安全的。显然,拥有一个不实现自身的特征对象没有多大意义。

通过指定 trait Foo : Sized {},您要求 Foo 的所有实现者也必须实现 Sized。但是 Rust 中的所有 trait 对象都是 ?Sized,这意味着它们可以取消大小。因此类型 Foo : Sized 的特征对象不能实现 Foo,所以你不能写

impl Foo for Foo

或者换句话说,特征不是对象安全的。