Преобразования типов
From / Into, TryFrom, приведения as, deref-приведение, AsRef / Borrow, transmute.
Тема объясняет преобразования типов: явные через трейты From, Into, TryFrom и оператор as, неявные через приведение (coercion) и небезопасные через transmute. Вопросы проверяют, почему реализация From даёт Into, но не наоборот, когда компилятору не хватает целевого типа для into() и как правило сирот (orphan rule) запрещает From между чужими типами. Раздел о приведениях as разбирает усечение и расширение знака целых, насыщение при переводе числа с плавающей точкой в целое, потерю точности u64 в f64 и то, какие типы в char не приводятся. Отдельно рассматривается deref-приведение (deref coercion): цепочки через Deref, места приведения, почему приведение не срабатывает для параметра с границей трейта и почему &Vec<String> не становится &[&str]. Раздел об AsRef, Borrow и ToOwned объясняет, почему HashMap<String, _> ищется по &str, какой тип хранит Cow::Owned и почему clone() на &str не даёт String. Последний раздел посвящён transmute: проверка размеров, порядок байтов, неограниченное время жизни (unbounded lifetime) и неопределённое поведение (undefined behavior) при превращении &T в &mut T.
38 вопросов: базовый уровень — 16, средний — 20, углублённый — 2. 5 справок, 31 источник.
Разделы
From/Into,TryFrom/TryInto- Приведения
as - Deref-приведение
AsRef,Borrow,ToOwnedtransmuteи его опасности
Предыдущая тема: Замыкания · Следующая тема: Обработка ошибок