开发技巧及注意事项
1、所有权转移
TIP
实现了Copy Trait的类型:
- 所有整数类型,比如u32
- 所有浮点数类型,比如f64
- 布尔类型,bool,它的值是true和false
- 字符类型,char
- 元组,当且仅当其包含的类型也都是Copy的时候。比如(i32, i32)是Copy的,但(i32, String)不是
- 共享指针类型或共享引用类型
1.1、i32
TIP
i32默认实现了Copy Trait, 它在进行所有权转移的时候,会自动使用Copy语义,而不是Move语义
js
// i32默认实现了Copy Trait, 它在进行所有权转移的时候,会自动使用Copy语义,而不是Move语义
let x = 3;
let n = x;
println!("n: {}, x: {}", n, x);
// n: 3, x: 31.2、String
TIP
String没有实现Copy trait在进行所有权转移的时候使用Move语义
js
let x = String::from("hello");
let n = x;
println!("n: {}, x: {}", n, x);
// 报错1.3、&str
TIP
&str默认实现了Copy Trait, 它在进行所有权转移的时候,会自动使用Copy语义,而不是Move语义
js
// &str默认实现了Copy Trait, 它在进行所有权转移的时候,会自动使用Copy语义,而不是Move语义
let s = "hello";
let n = s;
println!("n: {}, s: {}", n, s);
// n: hello, s: hello1.4、实现Copy
js
#[derive(Copy, Clone, Debug)]
struct Def(i32, i32);
MZ's 技术指南