Skip to content
On this page

开发技巧及注意事项

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: 3

1.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: hello

1.4、实现Copy

js
#[derive(Copy, Clone, Debug)]
struct Def(i32, i32);

Released under the MIT License.