dar*_*cts 6 primitive traits rust
“该str
类型也称为‘字符串切片’,是最原始的[强调]字符串类型。” (https://doc.rust-lang.org/std/primitive.str.html)
因此,直观上str
应该是可复制的,它是:
fn main() {
let _str = "hello";
let _str2 = _str;
println!("{}", _str); // Output: hello
}
Run Code Online (Sandbox Code Playgroud)
但是,它没有实现以下Copy
特征:
fn main() {
is_copy::<str>(); // Compile time error: the trait std::marker::Copy is not implemented for str
}
fn is_copy<T: Copy>() {}
Run Code Online (Sandbox Code Playgroud)
是什么允许这种类似复制的行为str
?
"abc"
不仅仅是一个。 其实是一个参考:str
fn name_of_val<T>(_: T) {
println!("{:?}", std::any::type_name::<T>());
}
name_of_val("abc");
//Prints "&str".
Run Code Online (Sandbox Code Playgroud)
游乐场。
因此,我们不能str
直接查看实现,而是必须查看特征的&T
(参考)实现。
我们有一个复制实现:
impl<'_, T> Copy for &'_ T
where
T: ?Sized;
Run Code Online (Sandbox Code Playgroud)
这就满足了&str
。但由于str
未调整大小,我们无法为其实现复制,因为它是字符串中的数据,而不是指向(size, ptr)
它的指针/引用/。因此,我们无法执行按位Copy
操作str
,因为我们不知道要复制多少数据。
归档时间: |
|
查看次数: |
6041 次 |
最近记录: |