文字整数值在Rust中是否具有特定类型?

Reg*_*gis 3 literals rust

https://doc.rust-lang.org/book/primitive-types.html#numeric-types中,它说在

设x = 42; // x的类型为i32

这意味着默认x类型i32.

但在http://rustbyexample.com/cast/literals.html中,它说明了这一点

未填充的文字,它们的类型取决于它们的使用方式

我知道我不能使用i32索引向量,但以下代码有效:

fn main() {
    let v = vec![1, 2, 3, 4, 5];

    let j = 1;  // j has default type i32? or it has type when it is first used?
                // And what is the type of 1?

    println!("{}", v[1]); // is 1 a usize?
    println!("{}", v[j]);
}
Run Code Online (Sandbox Code Playgroud)

那么,字面积分值的类型是什么?

sep*_*p2k 7

语言参考:

填充的整数文字的类型由类型推断确定:

  • 如果可以从周围的程序上下文唯一确定整数类型,则非整数整数文字具有该类型.

  • 如果程序上下文约束类型,则默认为带符号的32位整数i32.

  • 如果程序上下文过度约束类型,则将其视为静态类型错误.

在线上

println!("{}", v[1]); // is 1 a usize?
Run Code Online (Sandbox Code Playgroud)

周围的程序上下文要求1是一个usize(因为这是[]操作员需要的),所以是的,这里1将有类型usize.

  • 还值得一提的是,该类型不是在“第一次使用”时推断出来的。如果在不同的上下文中使用它,您将收到编译器错误。它根本无法确定类型。 (4认同)