const

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

  1. const DIGEST_SIZE: usize = 3;
  2. const ZERO: Option<u8> = Some(42);
  3. fn compute_digest(text: &str) -> [u8; DIGEST_SIZE] {
  4. let mut digest = [ZERO.unwrap_or(0); DIGEST_SIZE];
  5. for (idx, &b) in text.as_bytes().iter().enumerate() {
  6. digest[idx % DIGEST_SIZE] = digest[idx % DIGEST_SIZE].wrapping_add(b);
  7. }
  8. digest
  9. }
  10. fn main() {
  11. let digest = compute_digest("Hello");
  12. println!("digest: {digest:?}");
  13. }

根据 Rust RFC Book 这些变量在使用时是内联 (inlined) 的。

在编译时只能调用标记为“const”的函数以生成“const”值。不过,可在运行时调用“const”函数。

  • Mention that const behaves semantically similar to C++’s constexpr
  • 虽然需要使用在运行中求值的常量的情况并不是很常见,但是它是有帮助的,而且比使用静态变量更安全。