Implementation

实现 impl

const 泛型

fn display_array<T: std::fmt::Debug, const N: usize>(arr: [T; N]) {
println!("{:?}", arr);
}
fn main() {
let arr: [i32; 3] = [1, 2, 3];
display_array(arr);

let arr: [i32; 2] = [1, 2];
display_array(arr);
}

假设某段代码需要在内存很小的平台上工作,因此需要限制函数参数占用的内存大小,此时就可以使用 const 泛型表达式来实现:

// 目前只能在nightly版本下使用
#![allow(incomplete_features)]
#![feature(generic_const_exprs)]

fn something<T>(val: T)
where
Assert<{ core::mem::size_of::<T>() < 768 }>: IsTrue,
// ^-----------------------------^ 这里是一个 const 表达式,换成其它的 const 表达式也可以
{
//
}

fn main() {
something([0u8; 0]); // ok
something([0u8; 512]); // ok
something([0u8; 1024]); // 编译错误,数组长度是1024字节,超过了768字节的参数长度限制
}

// ---

pub enum Assert<const CHECK: bool> {
//
}

pub trait IsTrue {
//
}

impl IsTrue for Assert<true> {
//
}

const fn 常量函数

const fn 允许在编译期对函数进行求值,从而实现更高效、更灵活的代码设计。
通常情况下,函数是在运行时被调用和执行的。然而,在某些场景下,希望在编译期就计算出一些值,以提高运行时的性能或满足某些编译期的约束条件。例如,定义数组的长度、计算常量值等

const fn add(a: usize, b: usize) -> usize {
a + b
}

const RESULT: usize = add(5, 10);

fn main() {
println!("The result is: {}", RESULT);
}