const

Constants are evaluated at compile time and their values are inlined wherever they are used:

const DIGEST_SIZE: usize = 3;
const ZERO: Option<u8> = Some(42);

fn compute_digest(text: &str) -> [u8; DIGEST_SIZE] {
    let mut digest = [ZERO.unwrap_or(0); DIGEST_SIZE];
    for (idx, &b) in text.as_bytes().iter().enumerate() {
        digest[idx % DIGEST_SIZE] = digest[idx % DIGEST_SIZE].wrapping_add(b);
    }
    digest
}

fn main() {
    let digest = compute_digest("Hello");
    println!("digest: {digest:?}");
}

Rust RFC Book によると、定数変数は使用時にインライン化されます。

コンパイル時に const 値を生成するために呼び出せるのは、const とマークされた関数のみです。ただし、const 関数は実行時に呼び出すことができます。

  • Mention that const behaves semantically similar to C++'s constexpr
  • 実行時に評価される定数が必要になることはあまりありませんが、静的変数を使用するよりも便利で安全です。