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

Блок unsafe

Блок unsafe - это конструкция языка Rust, которая позволяет выполнять операции, безопасность которых компилятор не может проверить автоматически. Внутри такого блока программист берёт на себя ответственность за соблюдение правил безопасности памяти. Блок unsafe не отключает проверки borrow checker и не делает код автоматически опасным - он лишь расширяет набор доступных операций, таких как разыменование сырых указателей, вызов unsafe-функций, доступ к изменяемым статическим переменным, реализация unsafe-трейтов и доступ к полям объединений.

Синтаксис

unsafe { // небезопасные операции }

Также существует форма выражения, которая возвращает значение:

let res = unsafe { // небезопасные операции };

Пример

Давайте разыменуем сырой указатель внутри блока unsafe:

fn main() { let x = 5; let ptr: *const i32 = &x; let res = unsafe { *ptr }; println!("{}", res); }

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

5

Пример

Давайте изменим значение через изменяемый сырой указатель внутри блока unsafe:

fn main() { let mut x = 10; let ptr: *mut i32 = &mut x; unsafe { *ptr = 20; } println!("{}", x); }

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

20

Пример

Давайте вызовем unsafe-функцию внутри блока unsafe:

unsafe fn dangerous() -> i32 { 42 } fn main() { let res = unsafe { dangerous() }; println!("{}", res); }

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

42

Пример

Давайте получим доступ к изменяемой статической переменной внутри блока unsafe:

static mut COUNTER: i32 = 0; fn main() { unsafe { COUNTER = 5; println!("{}", COUNTER); } }

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

5

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

  • ключевое слово unsafe,
    которое помечает небезопасные функции и трейты
  • unsafe fn,
    которая объявляет небезопасную функцию
  • const pointer,
    который является сырым указателем на неизменяемые данные
  • mut pointer,
    который является сырым указателем на изменяемые данные
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить