为什么积分文字推断出与添加到的相同类型而不是i32(默认的整数类型)?

时间:2018-04-09 15:56:05

标签: rust

为什么变量no_type推断为i8而不推断为i32(默认类型)?

fn main() {
    let no_type = 25;

    let int8: i8 = 10;

    let sum = no_type + int8;
    println!("{} + {} = {}", no_type, int8, sum);
}

xy的类型是什么?

fn main() {
    let x = 12;
    let y = 13;

    println!("{}", x + y);

    let z: i8 = 10;
    println!("{}", z + x);
}

1 个答案:

答案 0 :(得分:4)

只有Add的一个相关实现涉及i8和非引用整数:

impl Add<i8> for i8 {
    type Output = i8;
}

这意味着,为了能够编译代码,如果已知添加的一侧是i8,则另一方也必须是i8。自 {integer} doesn't have a type yet起,它可以自由变化,编译器会为其分配fn main() { let a = 1; let b = 1 + a; let c = 1 + b; let d = 1 + c; let e = 1 + d; let f = 1 + e; let g = 1 + f; let sum = g + 1i8; let _: () = a; // found type `i8` let _: () = sum; // found type `i8` } 类型。

这适用一次(如在第一个代码块中),两次(如在第二个代码块中),或适用的次数:

i32
  

{{1}}(默认类型)

&#34;默认&#34;并不是最好的名字。当类型推断无法确定具体类型时,它只使用。因此,您经常会听到这种称为&#34;后退&#34;类型。

另见: