68·进阶特性高级

const 泛型

const 泛型

学习目标

  1. 理解 const 泛型的用途
  2. 掌握 const 参数语法
  3. 实现固定大小数组的泛型

核心概念

基本语法

// N 是编译时常量参数
struct Array<T, const N: usize> {
    data: [T; N],
}

impl<T, const N: usize> Array<T, N> {
    fn len(&self) -> usize {
        N
    }
}

fn main() {
    let arr = Array { data: [1, 2, 3] };
    println!("长度: {}", arr.len());
}

函数中的 const 泛型

fn first_n<const N: usize>(arr: &[i32]) -> [i32; N] {
    let mut result = [0; N];
    for i in 0..N {
        result[i] = arr[i];
    }
    result
}

fn main() {
    let data = [1, 2, 3, 4, 5];
    let first_three: [i32; 3] = first_n(&data);
    println!("{:?}", first_three);
}

const 表达式

fn main() {
    // const 参数可以用表达式
    const fn factorial(n: usize) -> usize {
        match n {
            0 | 1 => 1,
            _ => n * factorial(n - 1),
        }
    }

    const N: usize = factorial(5);
    let arr = [0; N];  // 120 个元素
}

小结

语法用途
const N: usizeconst 泛型参数
[T; N]固定大小数组
const fn编译期函数

练习编辑器

rust
Loading...