结构体
Syntax
Struct →
StructStruct
| TupleStruct
StructStruct →
struct IDENTIFIER GenericParams? WhereClause? ( { StructFields? } | ; )
TupleStruct →
struct IDENTIFIER GenericParams? ( TupleFields? ) WhereClause? ;
StructFields → StructField ( , StructField )* ,?
StructField → OuterAttribute* Visibility? IDENTIFIER : Type
TupleFields → TupleField ( , TupleField )* ,?
_结构体_是使用关键字 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 属性指定特定布局。