"abc"
это больше , чем просто a str
. На самом деле это ссылка:
fn name_of_val<T>(_: T) {
println!("{:?}", std::any::type_name::<T>());
}
name_of_val("abc");
//Prints "&str".
Детская площадка .
Поэтому мы не можем смотреть на реализации str
напрямую, вместо этого мы должны смотреть на &T
(Справочник) Реализации черт.
У нас есть копия impl:
impl<'_, T> Copy for &'_ T
where
T: ?Sized;
Это удовлетворяет &str
. Но так как str
не имеет размера, мы не можем включить его копирование, поскольку это данные в строке, а не указатель / ссылка / (size, ptr)
на нее. Поэтому мы не могли бы сделать побитовое Copy
из str
, так как мы не знали бы, сколько данных скопировать.