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]>();