'generic blanket impl of ToString' 和 rust 中的 'impl Tostring for char/str/String...' 有冲突吗

Does the 'generic blanket impl of ToString' conflict with the 'impl Tostring for char/str/String...' in rust

T 有一个通用的全面实现 ToString,

impl<T> ToString for T where
    T: Display + ?Sized, 

我还注意到 impl ToString for char/str/String...,以及库文档中的许多其他类型 https://doc.rust-lang.org/std/string/trait.ToString.html#implementors

它是否与通用毯子实现冲突?

显然没有冲突,因为它有效 ☺

但是你是对的,它应该冲突。有一项正在开发中的功能称为 "specialization",如果存在多个 impl,则编译器可以解决冲突,前提是其中一个比其他的更具体。在这种情况下,实现显式类型(charString)比任何泛型 impl<T> for T 都更具体,因此它有效。

此功能对于一般用途而言还不够稳定,但它的一个子集被认为足以用于 Rust 标准库,如您在 the source code for impl ToString for char:

中所见
#[stable(feature = "char_to_string_specialization", since = "1.46.0")]
impl ToString for char {