定义结构体 Definition
结构体有三种写法:
- struct struct
- tuple struct
- union struct
Struct Structs
Struct structs 又称为 named-field struct.
C 语言中类似的结构体, 经典写法, 除了各元素本身占用的内存之外, struct 内还可能有 一个额外的 padding, 用于对齐内存, 即是 4 的倍数.
#![allow(unused)] fn main() { struct PointF { x: f32, y: f32, } }
Tuple Structs
命名元组, Tuple-like structs, named tuple, 其实就是一个元素的别名, 比如 struct Matrix(f64, f64, f64, f64)
.
也可能包含一个 padding 用于对齐内存.
pub struct Bounds(pub usize, pub usize); impl Bounds { fn new(elem0: usize, elem1: usize) -> Bounds { Bounds(elem0, elem1) } } fn main() { let image_bounds = Bounds(1024, 768); }
这种写法对于重命名一个新的类型很有效, 还可以为它实现新的方法:
#![allow(unused)] fn main() { struct Ascii(Vec<u8>); }
这种写法比以下写法更为严格, 下面的写法只是声明了一个别名, 并不能给 Ascii
添加新的方法:
#![allow(unused)] fn main() { type Ascii = Vec<u8>; }
Unit-Like Structs
Unit struct, 即定义一个空白的不包含任何具体元素的, 比如 struct Nil;
, 其占用的
内存大小为0.
struct Nil (); fn main() { let nil = Nil; assert_eq!(std::mem::size_of_val(&nil), 0); }