【问题标题】:Why doesn't Rust demand dereferencing in some cases? [duplicate]为什么 Rust 在某些情况下不要求取消引用? [复制]
【发布时间】:2021-12-26 21:35:28
【问题描述】:

当我看到这段代码时,一切都清楚了。我们有一个引用,我们应该取消引用以操作和读取其中的数据。

fn twice(x: &mut u8) {   
    *x = *x * 2;
}

但是为什么下面的代码会编译呢?

fn twice(x: &u8) -> u8 {
    x * 2
}

为什么 Rust 不要求我在此处取消引用 x 并在第一个示例中要求它?

【问题讨论】:

    标签: rust


    【解决方案1】:

    Rust 有一个Mul<u8> implementation for &u8。这意味着您可以将&u8u8 相乘得到u8,而无需取消引用。但是,无论出于何种原因,&mut u8 没有实例,因此以下操作将失败:

    fn twice(x: &mut u8) -> u8 {
        x * 2
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 2019-10-14
      • 2016-01-27
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 2016-06-21
      • 2012-04-01
      • 1970-01-01
      相关资源
      最近更新 更多