Casting and coercion
Casting is a mechanism of downgrading or upgrading a type to some other type. When the casting happens implicitly, it is called coercion. Rust also allows for casting types at various levels. The very obvious candidates are primitive numeric types. You may have the need to cast a u8
type to promote to u64
or to truncate i64
to i32
. To perform trivial casts, we use the as
keyword, like so:
let a = 34u8; let b = a as u64;
It's not only primitive types—casting is supported at higher-level types too. We can also cast a reference of a type to its trait object, if it implements that particular trait. So we can do something like the following:
// cast_trait_object.rs use std::fmt::Display; fn show_me(item: &Display) { println!("{}", item); } fn main() { let a = "hello".to_string(); let b = &a; show_me(b); // let c = b as &Display; }
There are other classes of casting supported by various pointer types:
- Converting a
*mut T
to*const T
. The other...