小编ter*_*tra的帖子

未针对移动值调用克隆?

我试图理解 Copy 如何与 Rust 中的移动语义交互。我希望这个程序能够克隆该对象,但事实并非如此。我有 Rust 1.0.0-beta。

#[derive(Debug)]                                  
struct X {
  y : i32,
}

impl Clone for X {
  fn clone(&self) -> X { 
    println!("clone");
    X { y: 4 }
  } 
}

impl Copy for X { }  

fn doit(x : X) {     
  println!("doit {:?}", x);
}

fn main() { 
  let z = X { y: 5 };    
  println!("main {:?}", z);
  doit(z);        
  println!("main {:?}", z);
}
Run Code Online (Sandbox Code Playgroud)

这是我的困惑:如果 X 不是“复制”,doit 会取得对象 z 的所有权并将其放在范围末尾。然后,main 中的第二个 println 会抱怨,因为 z 被移动了。美好的。但是,现在我已将 X 标记为 …

rust

5
推荐指数
1
解决办法
943
查看次数

标签 统计

rust ×1