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

Атрибут #[repr] у enum

Атрибут #[repr] у enum задаёт способ размещения перечисления в памяти. По умолчанию Rust сам выбирает внутреннее представление, но иногда нужно зафиксировать его явно - например, для совместимости с C, для работы с дискриминантами или для точного контроля размера. Атрибут применяется к объявлению enum и принимает один из вариантов представления: repr(u8), repr(i32), repr(C), repr(usize) и другие.

Синтаксис

#[repr(представление)] enum Имя { Вариант1, Вариант2, }

Пример

Зададим перечислению представление repr(u8) и приведём вариант к числу:

#[repr(u8)] enum Status { Active, Inactive, Pending, } fn main() { let res = Status::Inactive as u8; println!("{}", res); }

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

1

Пример

Можно задать явные значения дискриминантов внутри перечисления с repr(i32):

#[repr(i32)] enum Code { Ok = 200, NotFound = 404, Error = 500, } fn main() { let res = Code::NotFound as i32; println!("{}", res); }

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

404

Пример

Представление repr(C) удобно для совместимости с C и для перечислений с полями:

#[repr(C)] enum Value { Int(i32), Float(f64), } fn main() { let res = std::mem::size_of::<Value>(); println!("{}", res); }

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

16

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

  • перечисление enum,
    которое хранит одно значение из нескольких вариантов
  • атрибут discriminant,
    который задаёт числовое значение варианта перечисления
  • вариант tuple-variant,
    который хранит данные в виде кортежа
  • вариант struct-variant,
    который хранит данные в виде структуры
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить