4.1 强制转换(Coercion)
Rust 的强制转换规则
1分钟内可阅读完
译文 · 基于 The Rustonomicon
强制转换(Coercion)
类型可在特定上下文中隐式被强制转换而改变。 这些变化通常只是类型的弱化,主要围绕指针和生命周期。 它们主要存在是为了让 Rust 在更多情况下「开箱即用」,且大体无害。
强制转换类型的完整列表见 reference 的 Coercion types 章节。
注意,匹配 trait 时我们不执行强制转换(receiver 除外,见下一页)。
若某类型 U 有 impl,且 T 可强制转换为 U,这并不构成 T 的实现。
例如下面无法通过类型检查,尽管把 t 强制转换为 &T 没问题,且 &T 有 impl:
trait Trait {}
fn foo<X: Trait>(t: X) {}
impl<'a> Trait for &'a i32 {}
fn main() {
let t: &mut i32 = &mut 0;
foo(t);
}
失败信息如下:
| |