为什么类型推断不适用于引用类型?

问题描述 投票:0回答:1

我写了类似下面的代码:

fn foo() {
    let x = &1;
    let y = 2;
    let z: u32 = x * y + 42_u32;
}

我收到一个错误:

error[E0277]: cannot add `u32` to `i32`
  --> src/main.rs:11:24
   |
11 |     let z: u32 = x * y + 42_u32;
   |                        ^ no implementation for `i32 + u32`
   |
   = help: the trait `std::ops::Add<u32>` is not implemented for `i32`

但是当我取消引用x时,它就可以正常工作。在一些实验中,也编译了以下代码。

let z: u32 = x + y * 42_u32;
let z: u32 = 42_u32 + x + y;

我想知道为什么Rust的类型推断能做到这一点。类型推断的顺序受操作顺序影响吗?如果是这样,为什么在这种情况下无法进行类型推断?

compiler-errors rust type-inference
1个回答
1
投票

这是一个known bug,涉及二进制操作(两个操作数),其原始类型位于引用后面。它正在getting fixed处理中。

© www.soinside.com 2019 - 2024. All rights reserved.