第4章 类型转换

强制转换、点运算符、强制转型与 transmute

译文 · 基于 The Rustonomicon

类型转换

原文链接: https://doc.rust-lang.org/nomicon/conversions.html

  归根结底,一切不过是某处的一堆比特,类型系统只是帮我们把比特用对。对比特进行类型化有两个常见问题:需要把那些完全相同的比特重新解释为另一种类型,以及需要改变比特使其对另一种类型具有等价含义。由于 Rust 鼓励在类型系统中编码重要性质,这些问题极其普遍。因此 Rust 提供了多种解决方式。

  首先看 Safe Rust 提供的重新解释值的方式。   最直接的方式是把值解构为组成部分,再用它们构造新类型。例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
struct Foo {
    x: u32,
    y: u16,
}

struct Bar {
    a: u32,
    b: u16,
}

fn reinterpret(foo: Foo) -> Bar {
    let Foo { x, y } = foo;
    Bar { a: x, b: y }
}

  但这充其量很烦人。对常见转换,Rust 提供了更符合人体工程学的替代方案。


4.1 强制转换(Coercion)

Rust 的强制转换规则

4.2 点运算符

点运算符的自动解引用与转换

4.3 强制转型(Cast)

as 强制转型的安全性与注意点

4.4 Transmute

mem::transmute 的危险与用法

最后修改 August 11, 2026: 更新 (70a5af133)