const
Константы вычисляются во время компиляции, и их значения подставляются везде, где используются:
// Copyright 2024 Google LLC
// SPDX-License-Identifier: Apache-2.0
const DIGEST_SIZE: usize = 3;
const FILL_VALUE: u8 = calculate_fill_value();
const fn calculate_fill_value() -> u8 {
if DIGEST_SIZE < 10 { 42 } else { 13 }
}
fn compute_digest(text: &str) -> [u8; DIGEST_SIZE] {
let mut digest = [FILL_VALUE; 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:?}");
}
Во время компиляции можно вызывать только функции, помеченные const, чтобы получить значения const. Однако функции const можно вызывать и во время выполнения.
This slide should take about 10 minutes.
- Упомяните, что по смыслу
constпохож наconstexprиз C++.