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

Небезопасная функция

Небезопасная функция - это функция, объявленная с помощью ключевого слова unsafe. Такая функция может выполнять операции, которые компилятор Rust не способен проверить на безопасность: разыменование сырых указателей, вызов других небезопасных функций, доступ к изменяемым статическим переменным, чтение объединений (union) и другие. Параметром функция принимает любые значения, которые нужны для её логики, но вызывать её можно только внутри блока unsafe или из другой небезопасной функции.

Синтаксис

unsafe fn function_name(parameters) -> ReturnType { // тело функции }

Пример

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

unsafe fn deref_ptr(ptr: *const i32) -> i32 { *ptr } fn main() { let x = 42; let ptr = &x as *const i32; let res = unsafe { deref_ptr(ptr) }; println!("{}", res); }

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

42

Пример

Давайте объявим небезопасную функцию, которая меняет значение по сырому изменяемому указателю:

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

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

99

Пример

Давайте объявим небезопасную функцию, которая вызывает другую небезопасную функцию std::ptr::read для чтения значения из сырого указателя:

unsafe fn read_value(ptr: *const i32) -> i32 { std::ptr::read(ptr) } fn main() { let x = 7; let ptr = &x as *const i32; let res = unsafe { read_value(ptr) }; println!("{}", res); }

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

7

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

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