Приведення
Rust не має неявних перетворень типів, але підтримує явні приведення за допомогою as
. Вони зазвичай відповідають семантиці C, де вони визначені.
fn main() { let value: i64 = 1000; println!("як u16: {}", value as u16); println!("як i16: {}", value as i16); println!("як u8: {}", value as u8); }
Результати функції as
завжди визначені у Rust і є стабільними на всіх платформах. Це може не збігатися з вашою інтуїцією щодо зміни знаку або приведення до меншого типу - зверніться до документації та коментарів для уточнення.
Приведення за допомогою as
є відносно гнучким інструментом, який легко використовувати неправильно, і може бути джерелом малопомітних помилок, оскільки майбутні роботи супроводження змінюють типи, які використовуються, або діапазони значень у типах. Приведення до типу найкраще використовувати лише тоді, коли потрібно вказати безумовне усічення (наприклад, виділити молодші 32 біти u64
за допомогою as u32
, незалежно від того, що було у старших бітах).
Для безпомилкового приведення (наприклад, u32
до u64
) краще використовувати From
або Into
замість as
, щоб переконатися, що приведення дійсно є безпомилковими. Для помилкових приведень доступні TryFrom
і TryInto
, якщо ви хочете обробити приведення, які відрізняються від тих, які не підходять.
Подумайте про перерву після цього слайда.
Оператор as
подібний до статичного приведення у C++. Використання as
у випадках, коли дані може бути втрачено, зазвичай не рекомендується або, принаймні, заслуговує на пояснювальний коментар.
Це типовий випадок приведення цілих чисел до usize
для використання у якості індексу.