rust
必背知识点
数据结构
通过关键字
定义数据类型
和内存位置
.
示例,说明
cpp
struct S {}
//用命名字段定义结构
struct S { x: T }
//用T类型的x命名字段定义结构.
struct S (T);
//用T类型的`.0`编号字段,定义"元组"结构.
struct S;
//定义零大小的`单位结构`.不占据空间,优化掉.
enum E {}
//定义枚举,代数`数据类型`,标签联.
enum E { A, B (), C {} }
//定义枚举的变量;可以是`A`单元,`B()`元组和类似结构的`C{}`.
enum E { A = 1 }
//有显式判定值的枚举,如,对`FFI`.
enum E {}
//没有变量的枚举,
union U {}
//针对`FFI`兼容的不安全的类C联
static X: T = T();
//带`'静态生命期,单内存位置`的`全局变量`
const X: T = T();
//定义常量,使用时,复制进临时
let x: T;
//按x在栈上分配T字节.可分配一次,不可更改.
let mut x: T;
//类似`let`,但允许可变和可变借用.
x = y;
//将y移动进`x`,如果T不是`Copy`,则为`y`,否则为`STD`和`copyingy`.
1,在库中,根据如何导入你的crate
,你可能会秘密地得到多个X实例
.
2,为了同步代码
在栈上绑定变量
.在async{}
中,它们成为可能驻留在堆上
的异步
状态机的一部分.
3,技术上,可变和不变
是用词不当.不变的绑定或共享引用
可能仍包含单元
,从而提供内部可变性.
创建并访问
数据结构;以及一些更多类型.
cpp
//解释
S { x: y }
//创建结构`S{}`或使用枚举按`y`设置x字段的`E::S{}`.
S { x }
//相同,但对x字段使用`x局部变量`.
S { ..s }
//填充s中的剩余字段,尤其是使用`Default::default()`很有用.
S { 0: x }
//与下面的`S(x)`类似,但使用`构`语法设置`.0`字段.
S (x)
//创建结构`S(T)`或使用按`x`设置`.0`字段的`E::S()`枚举.
S
//如果S是单元结构`S`;或使用枚举`E::S`创建S的值.
E::C { x: y }
//创建`C`枚举变量.上面的其他方法也有效.
()
//空元组,包括文字和类型,也叫单位.
(x)
//括号内的式.
(x,)
//单元素元组式.
(S,)
//单元素元组类型.
[S]
//未规范的数组类型.长度,即切片.不能在栈上
[S; n]
//`固定长度`的包含S类型的元素的`数组类型`.
[x; n]
//有n个x副本的数组实例(式)
[x, y]
//有给定元素x和y的数组实例.
x[0]
//集合索引,`w.usize.Impl`通过`Index,IndexMut`.
x[..]
//相同,通过区间(这里是全区间),也有`x[a..b],x[a..=b],..`.如下.
a..b
//右排他区间创建,如,`1..3`表示`1,2`.
..b
//没有起点的右排他区间.
..=b
//没有起点的区间.
a..=b
//包含区间,`1..=3`表示`1,2,3`.
a..
//区间从到没有终点.
..
//全区间,一般表明整个集合.
s.x
//命名字段访问,如果x不是类型S的一部分,则`引用`可能会试`解引用`.
s.0
//数字字段访问,针对`S(T)`元组类型.