1.基本类型都是复制语义的
fn main(){
    let a = 123;
    {
        #[allow(unused_variables)]
        let b = a;  //如果是移动语义,那么后续的a将不再有效
    }
    println!("{:?}", a);  //编译成功,说明a是复制语义
}
2.非基本类型是移动语义
fn main(){
    let a = String::from("abc");
    {
        #[allow(unused_variables)]
        let b = a;  //如果是移动语义,那么后续的a将不再有效
    }
    println!("{:?}", a);  //编译失败,说明a是移动语义
}
3.赋值给占位符,没有任何效果
fn main(){
    let a = String::from("abc");
    {
        #[allow(unused_variables)]
        let _ = a;
    }
    println!("{:?}", a);  //编译成功,说明占位符并没有产生移动的效果
}
4.struct类型默认是移动语义
#[derive(Debug)]
struct MyStruct{
  value: i64
}
fn main(){
    let a = MyStruct{value:1234};
    {
        #[allow(unused_variables)]
        let b = a;
    }
    println!("{:?}", a);  //编译失败,说明a移动了
}
5.声明struct的复制语义
#[derive(Debug,Clone,Copy)]
struct MyStruct{
  value: i64
}
fn main(){
    let a = MyStruct{value:1234};
    {
        #[allow(unused_variables)]
        let b = a;
    }
    println!("{:?}", a);  //编译成功,说明a没有移动
}