06-结构体

结构体 — The Rust Reference

译文 · 基于 The Rust Reference

原文链接: https://doc.rust-lang.org/reference/items/structs.html

r[items.struct]

结构体

r[items.struct.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)* `,`?

TupleField -> OuterAttribute* Visibility? Type

r[items.struct.intro] 结构体是用关键字 struct 定义的名义结构体类型。

r[items.struct.namespace] 结构体声明在其所在模块或块的类型命名空间中定义给定名称。

struct 项及其使用的一个例子:

1
2
3
struct Point {x: i32, y: i32}
let p = Point {x: 10, y: 11};
let px: i32 = p.x;

r[items.struct.tuple] 元组结构体是名义元组类型,同样用关键字 struct 定义。除定义类型外,它还在值命名空间中定义同名构造器。该构造器是一个函数,调用它可以创建该结构体的新实例。例如:

1
2
3
struct Point(i32, i32);
let p = Point(10, 11);
let px: i32 = match p { Point(x, _) => x };

r[items.struct.unit] 类单元结构体是没有任何字段的结构体,通过完全省略字段列表来定义。这样的结构体会隐式定义一个与其类型同名的常量。例如:

1
2
struct Cookie;
let c = [Cookie, Cookie {}, Cookie, Cookie {}];

等价于

1
2
3
struct Cookie {}
const Cookie: Cookie = Cookie {};
let c = [Cookie, Cookie {}, Cookie, Cookie {}];

r[items.struct.layout] 结构体的精确内存布局未指定。可以使用 repr 属性指定特定布局。

最后修改 August 21, 2026: 更新 (76fc81a2e)