РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1186 of 1245 menu

Функция hint::unreachable_unchecked

Функция unreachable_unchecked из модуля std::hint сообщает компилятору, что выполнение программы никогда не должно достигнуть этой точки. Она не принимает параметров и возвращает значение типа ! (never type), которое может быть приведено к любому другому типу. Функция является unsafe, потому что при достижении этой точки во время выполнения поведение программы становится неопределённым.

В отличие от макроса unreachable!, который паникует при достижении, данная функция не выполняет никаких проверок и не генерирует код паники. Компилятор вправе считать эту ветку кода недостижимой и оптимизировать её.

Синтаксис

unsafe { std::hint::unreachable_unchecked() }

Пример

Давайте рассмотрим ситуацию, когда значение переменной гарантированно находится в известном диапазоне, и мы хотим сообщить об этом компилятору:

fn main() { let x: u8 = 1; let res = match x { 0 => "zero", 1 => "one", 2 => "two", _ => unsafe { std::hint::unreachable_unchecked() }, }; println!("{}", res); }

Результат выполнения кода:

"one"

Пример

Давайте рассмотрим пример, где после проверки условия мы точно знаем, что значение не может быть отрицательным:

fn abs(x: i32) -> i32 { if x >= 0 { x } else { -x } } fn main() { let res = abs(-5); println!("{}", res); }

Результат выполнения кода:

5

Опасность функции

Если условие, которое программист считал гарантированным, окажется ложным, поведение программы становится неопределённым. Компилятор может удалить проверки, изменить порядок выполнения или привести к другим непредсказуемым последствиям.

Смотрите также

  • ключевое слово unsafe,
    которое открывает доступ к небезопасным операциям
  • функция assert_unchecked,
    которая сообщает компилятору о выполнении условия
  • функция black_box,
    которая препятствует оптимизациям компилятора
  • функция transmute,
    которая переинтерпретирует тип значения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить