结构

语法
结构体 :
      Struct结构体
   | 元组结构体

Struct结构体 :
   struct 标识符  泛型参数组? Where从句? ( { 结构体字段组? } | ; )

元组结构体 :
   struct 标识符  泛型参数组? ( 元组字段组? ) Where从句? ;

结构体字段组 :
   结构体字段 (, 结构体字段)* ,?

结构体字段 :
   外围属性*
   可见性?
   标识符 : 类型

元组字段组 :
   元组字段 (, 元组字段)* ,?

元组字段 :
   外围属性*
   可见性?
   类型

结构体 是使用关键字 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 属性 指定特定的布局。