我正在寻找有关引用和可变引用类型的复制/移动语义的文档 .
以下代码片段显示了不可变引用( & T
)实现 Copy
trait和可变引用( &mut T
)没有 .
struct T;
fn copyable<U>(_: U) where U: Copy {}
fn main() {
let a = &T;
copyable(a); // OK
let b = &mut T;
copyable(b);
// error: the trait `core::marker::Copy` is not implemented for the type `&mut T`
}
但我找不到这种行为的描述 . 有人知道一些(非)官方文件吗? (或者我错了吗?)
2 回答
Rust的
std::marker::Copy
特征参考说(感谢@Chris Emerson):作为代码的补充,您可以随时要求编译器告诉您是否可以复制类型,即使无法构造该类型:
如果类型 not 实现
Copy
,编译器将产生错误 .您可以对此进行扩展,以便针对类型的每个引用提出问题 . 您现有的代码仅显示对特定类型的不可变引用实现
Copy
:为
&mut T
做同样的事情:产生你看到的同样错误:
我们已经看到为什么
&mut T
无法复制,但为什么可以复制&T
?在某种程度上,这是参考的整个点 . 参考是一种廉价共享数据的方式 . 我们可以简单地为每件事物提供对原始物品的轻量级引用,而不是需要克隆(可能是昂贵的)某些东西给予多件事物 . 如果引用无法具有几乎相同的值 .