DEV Community

drake
drake

Posted on

Rust中可变引用和不可变引用不能同时存在的问题

  • 这么设计的原因是为了防止数据竞争
  • 但是下面的代码依然很难搞懂为何会编译报错:
fn main() {
    let mut a = 1;
    let c = &mut a;
    *c += 1; 
    println!("{}",a);
    println!("{}",c)
}
Enter fullscreen mode Exit fullscreen mode
  • 通过查找资料,能够得出的结论是在使用引用的时候不能同时使用可变引用和不可变引用
  • 进一步了解到println()这个宏在打印输出变量值的时候,会自动创建一个对变量的不可变应用,来获取变量的值
  • 所以当a的不可变引用没有被释放的时候,那么此时是不能再创建对于a的不可变引用的,而这个“创建”就是println()
  • 那就是不可变引用什么时候被释放的问题了
  • 通过一些资料能够得到:println!("{}",c)这行代码执行完a的不可变引用就释放了

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more