Функция hint::assert_unchecked
Функция hint::assert_unchecked из модуля std::hint
сообщает компилятору, что переданное ей булево условие
всегда истинно. В отличие от макроса assert!,
она не выполняет проверку во время исполнения и не паникует
при нарушении условия. Параметром функция принимает
булево выражение, которое, как обещает программист,
всегда истинно. Функция является unsafe, потому что
при нарушении этого обещания поведение программы
становится неопределённым.
Функция возвращает . Если условие ложно, поведение
не определено, поэтому вызывать её можно только тогда,
когда вы уверены в истинности условия. Типичное применение -
подсказка оптимизатору внутри уже проверенных ветвей кода.
Синтаксис
unsafe { std::hint::assert_unchecked(condition) }
Пример
Давайте сообщим компилятору, что переменная x
всегда больше нуля, чтобы он мог лучше оптимизировать код:
use std::hint;
fn main()
{
let x: i32 = 10;
unsafe {
hint::assert_unchecked(x > 0);
}
println!("{}", x);
}
Результат выполнения кода:
10
Пример
Давайте применим функцию внутри цикла, где мы точно знаем, что индекс не выходит за границы среза:
use std::hint;
fn main()
{
let arr = [1, 2, 3, 4, 5];
let len = arr.len();
let mut sum = 0;
for i in 0..len {
unsafe {
hint::assert_unchecked(i < len);
}
sum += arr[i];
}
println!("{}", sum);
}
Результат выполнения кода:
15
Смотрите также
-
ключевое слово
unsafe,
которое открывает блок небезопасного кода -
функция
unreachable_unchecked,
которая сообщает компилятору о недостижимости участка кода -
функция
transmute,
которая переинтерпретирует биты одного типа как другой тип -
функция
black_box,
которая скрывает значение от оптимизатора