Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

English Original

Rust 内建类型

你将学到: Rust 的基础类型(i32、u64、f64、bool、char)、类型推导、显式类型标注,以及它们如何与 C/C++ 的原始类型进行对比。Rust 不允许隐式转换 —— 必须进行显式类型转换。

  • Rust 具有类型推导功能,但也允许显式指定类型。
描述类型示例
有符号整数i8, i16, i32, i64, i128, isize-1, 42, 1_00_000, 1_00_000i64
无符号整数u8, u16, u32, u64, u128, usize0, 42, 42u32, 42u64
浮点数f32, f640.0, 0.42
Unicode 字符char‘a’, ‘$’
布尔值booltrue, false
  • Rust 允许在数字之间任意使用 _ 以提高可读性。

Rust 类型指定与赋值

  • Rust 使用 let 关键字为变量赋值。变量的类型可以可选地跟在 : 之后。
fn main() {
    let x : i32 = 42;
    // 这两个赋值在逻辑上是等价的
    let y : u32 = 42;
    let z = 42u32;
}
  • 函数参数和返回值(如果有)必须显式指定类型。以下函数接收一个 u8 参数并返回 u32:
#![allow(unused)]
fn main() {
fn foo(x : u8) -> u32
{
    return x as u32 * x as u32;
}
}
  • 未使用的变量应以 _ 为前缀,以避免编译器警告。

Rust 类型推导

fn secret_of_life_u32(x : u32) {
    println!("u32 类型的 secret_of_life 是 {}", x);
}

fn secret_of_life_u8(x : u8) {
    println!("u8 类型的 secret_of_life 是 {}", x);
}

fn main() {
    let a = 42; // let 关键字赋值;a 的类型被推导为 u32
    let b = 42; // let 关键字赋值;b 的推导类型为 u8
    secret_of_life_u32(a);
    secret_of_life_u8(b);
}

Rust 变量与可变性

  • Rust 的变量默认是不可变 (Immutable) 的,除非显式使用 mut 关键字标识。例如,除非将 let a = 42 改为 let mut a = 42,否则以下代码将无法通过编译:
fn main() {
    let a = 42; // 必须改为 let mut a = 42 才能允许下方的赋值语句
    a = 43;  // 除非进行上述修改,否则此行无法编译
}
  • Rust 允许变量名重用(变量遮蔽 / Shadowing):
fn main() {
    let a = 42;
    {
        let a = 43; // OK: 另一个同名变量,遮蔽了外层的 a
    }
    // a = 43; // 不允许直接修改不可变变量
    let a = 43; // OK: 创建了全新的变量 a 进行了新赋值
}