Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Типы динамического размера

Большинство типов имеют фиксированный размер, известный во время компиляции, и реализуют трейт Sized. Тип с размером, известным только во время выполнения, называется типом динамического размера (DST) или, неформально, типом без размера. Срезы, типы-объекты трейтов и str являются примерами DST.

Такие типы можно использовать только в определённых случаях:

  • Указатели на DST имеют размер, но их размер в два раза больше размера указателей на типы с известным размером
    • Указатели на срезы и str также хранят количество элементов.
    • Указатели на объекты трейтов также хранят указатель на таблицу виртуальных методов (vtable).
  • DST могут быть переданы как типовые аргументы обобщённым параметрам типа, имеющим специальное ограничение ?Sized. Они также могут использоваться для определений ассоциированных типов, когда соответствующее объявление ассоциированного типа имеет ограничение ?Sized. По умолчанию любой параметр типа или ассоциированный тип имеет ограничение Sized, если оно не ослаблено с помощью ?Sized.
  • Трейты могут быть реализованы для DST. В отличие от обобщённых параметров типа, Self: ?Sized является значением по умолчанию в определениях трейтов.
  • Структуры могут содержать DST в качестве последнего поля; это делает саму структуру DST.

Note

Переменные, параметры функций, константы и статические переменные должны быть Sized.