Rust 所有的基元类型都实现了复制特性吗?

Rust 所有的基元类型都实现了复制特性吗?,rust,Rust,是否所有人都执行了复制特性 了解这一点会很有趣,因为这些知识肯定是对一种新编程语言的全面学习的一部分。我们可以使用编译器来证明某些东西是否实现了复制。使用: 本书列表中还有其他几种类型: 元组 阵列 这些类型可以包含许多类型;它们在泛型上参数化。仅当包含的所有值都是Copy时,它们才是Copy: // OK is_copy::<&String>(); is_copy::<*const String>(); is_copy::<*mut String>

是否所有人都执行了复制特性


了解这一点会很有趣,因为这些知识肯定是对一种新编程语言的全面学习的一部分。

我们可以使用编译器来证明某些东西是否实现了
复制。使用:

本书列表中还有其他几种类型:

  • 元组
  • 阵列
这些类型可以包含许多类型;它们在泛型上参数化。仅当包含的所有值都是
Copy
时,它们才是
Copy

// OK
is_copy::<&String>();
is_copy::<*const String>();
is_copy::<*mut String>();
// Not OK
is_copy::<&mut i32>();
// OK
is_copy::<[i32; 1]>();
is_copy::<(i32, i32)>();
// Not OK
is_copy::<[Vec<i32>; 1]>();
is_copy::<(Vec<i32>, Vec<i32>)>();

和往常一样。(除非有)。

我没有看到在中列出的基本类型(例如),我是否遗漏了什么?@ArtemGr guh,我真的认为现在已经解决了。我为此链接到了这个问题。但是切片(那些形式为
&[T]
的切片,而不是简单的无尺寸的
[T]
)只是参考,因此它们总是
副本。我的意思是,您的最后一个示例,一旦您为
Vec
generic)添加了一个类型,它实际上就起作用了:
is_copy(&[Vec:::new()][..)@rodrigo odd,不知道我怎么会错过这个。我已经纠正了这一点,并添加了一节关于引用的内容。@Shepmaster在这里输入错误:“不可变引用始终实现复制,不可变引用从不实现复制”:
// OK
is_copy::<[i32; 1]>();
is_copy::<(i32, i32)>();
// Not OK
is_copy::<[Vec<i32>; 1]>();
is_copy::<(Vec<i32>, Vec<i32>)>();
// OK
is_copy::<&str>();
is_copy::<&[i32]>();
// Not OK
is_copy::<str>();
is_copy::<[i32]>();