结构体

语法
结构体 :
      具名字段结构体
   | 元组结构体

具名字段结构体 :
   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 属性 来指定特定的布局。