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