结构体
语法
结构体 :
具名字段结构体
| 元组结构体具名字段结构体 :
struct
标识符 泛型参数? WhereClause? ({
具名字段?}
|;
)元组结构体 :
struct
标识符 泛型参数?(
元组字段?)
WhereClause?;
具名字段 :
具名字段 (,
具名字段)*,
?元组字段 :
元组字段 (,
元组字段)*,
?
结构体 是一种用关键字 struct
定义的名义 结构体类型。
结构体声明在它所在的模块或块的 类型命名空间 中定义给定的名称。
一个 struct
条目及其用法的例子
#![allow(unused)] fn main() { struct Point {x: i32, y: i32} let p = Point {x: 10, y: 11}; let px: i32 = p.x; }
元组结构体 是一种名义 元组类型,也是用关键字 struct
定义的。除了定义一个类型之外,它还在 值命名空间 中定义一个同名的构造器。构造器是一个可以被调用来创建一个新的结构体实例的函数。例如
#![allow(unused)] fn main() { struct Point(i32, i32); let p = Point(10, 11); let px: i32 = match p { Point(x, _) => x }; }
单元结构体 是一种没有任何字段的结构体,通过完全省略字段列表来定义。 这样的结构体隐式地定义了一个与其类型同名的 常量。例如
#![allow(unused)] fn main() { struct Cookie; let c = [Cookie, Cookie {}, Cookie, Cookie {}]; }
等价于
#![allow(unused)] fn main() { struct Cookie {} const Cookie: Cookie = Cookie {}; let c = [Cookie, Cookie {}, Cookie, Cookie {}]; }
结构体的精确内存布局没有被指定。可以使用 repr
属性 来指定特定的布局。