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



我正在寻找大小特征不安全的原因,例如:

trait Foo:Sized{}

Foo不安全。

我读过一些关于物体安全的帖子,比如物体安全和铁锈中的尺寸。我发现深层原因是编译器自动impl Foo for Foo

我搞不清楚编译器为什么要这样做,为什么这会导致Foo不是对象安全的?

非常感谢。

impl Foo for Foo是用Rust编写的方法"为特征对象CCD_ 5实现特征CCD_;。如果一个特征的特征对象实现了该特征,那么该特征只能是对象安全的。显然,拥有一个本身没有实现的特质对象是没有多大意义的。

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

impl Foo for Foo

或者,换言之,这种特性不是对象安全的。

最新更新