rust的println如何处理论点的所有权?

时间:2019-11-02 02:30:50

标签: rust

问题来自以下代码:

#[derive(Debug)]
struct Foo {
  x: i32,
}

pub fn main() {
  let a = vec![Foo{x:1}, Foo{x:2}];
  println!("{:?}", a[1]);
  println!("{:?}", &a[1]);
  println!("{:?}", *(&a[1]));
}

cargo run之后,代码输出:

Foo { x: 2 }
Foo { x: 2 }
Foo { x: 2 }

这使我想知道:

  1. 为什么println!("{:?}", a[1])不拥有第二元素的所有权?
  2. 在这种情况下按引用传递和按值传递有什么区别?
  3. 是否有可能实现类似的功能,而无需借助宏系统,该功能能够通过值(不拥有所有权)和引用来接受参数?

0 个答案:

没有答案