rust学习笔记基础篇4--结构体变量声明与绑定,所有权,借用,引用(霜之小刀)

标签: rust 霜之小刀
19人阅读 评论(0) 收藏 举报
分类:

rust学习笔记基础篇4–结构体变量声明与绑定,所有权,借用,引用(霜之小刀)

欢迎转载和引用,若有问题请联系
若有疑问,请联系
Email : lihn1011@163.com
QQ:2279557541


关于结构体的变量声明

看过前面几节的就发现结构体的声明其实和其他的也没什么区别。

struct Xxx{
    a:i32,
    b:i16,
    c:bool,
}
let mut x = Xxx{a:1,b:2,c:false};
println!("a:{},b:{},c:{}", x.a, x.b, x.c);

这样就可以声明一个结构体并使用了。
2.2.4 绑定,所有权,借用,引用
虽然貌似能够声明rust的各种类型了,但是在测试的时候总是碰到一些奇怪的问题。
比如用旧的结构体初始化新的结构体后,旧的就没法用了?比如如下代码

struct Xxx{
    a:i32,
    b:i16,
    c:bool,
}
let mut x = Xxx{a:1,b:2,c:false};
let y = x;
println!("{}",x.a);

这段代码在println上报错,说是x被move了,没办法使用。
这里就不得不牵扯出rust语言的几个概念,绑定,所有权,借用,引用。

fn main() {
    struct Xxx{
        a:i32,
        b:i16,
        c:bool,
    }

    //这是绑定的意思,将100这个值创建出来,然后将x1这个名称绑定到这个值上
    let x1:i32 = 100;
    //这也是绑定的意思,将Xxx这个结构体创建出来,然后将x2的名称绑定到这个x2上。
    let x2 = Xxx{a:14, b:15, c:false};


    //这里将从x1拷贝一份新的,然后将y1绑定到这份新的上
    let mut y1:i32 = x1;
    //将x2所对应结构体的所有权转让给y2,之后x2就不能再使用了
    let mut y2 = x2;

    //用&表示借用,意思是借用下这个内容,可以读取,但是不能修改。
    //let z1 = &y1;
    //let z2 = &y2;

    //&mut 表示引用,引用就可以修改所引用的值得内容了,但是指导引用者被析构才会归还所有权,引用过程中被引用这不具有所有权。
    let a1 = &mut y1;
    let a2 = &mut y2;
}

这里感觉上有个歧义,在使用let a = b的时候,为何有时是将b拷贝一份,然后拷贝后变量所有权给a,而有的时候是直接把b变量的所有权转移给a呢?
这里其实就有个概念了,就是Traits这个概念了。这里先不说这个概念。
我们这样理解,所有系统默认有的变量类型,就是前面提到过的
有符号整数: i8, i16, i32, i64 和isize (指针大小)
无符号整数: u8, u16, u32, u64 和 usize (指针大小)
浮点: f32, f64
char Unicode标值一样 ‘a’, ‘α’ 和 ‘∞’ (每4字节)
bool 以及 true 或 false
这些类型,在=的过程中,都使用的是拷贝(其实是语言内部实现了copy),而其他的自定义的类型,如struct在未实现copy前,都是转移所有权的意思。而数组和元组,是根据其变量的类型决定到底是copy还是转移所有权。

查看评论

rust所有权理解(备忘)

最近闲的没事,就准备学习一下rust。rust是Mozilla开发的一门编程语言。 rust是为了多核系统而设计的一门编程语言,它因其特殊的机制有线程安全性,编译期查出内存错误的优点,可能语法有着那么...
  • tjq980303
  • tjq980303
  • 2017-04-27 17:56:01
  • 403

Rust:Programming Rust:所有权

“我发现,甚至在我可以编译代码之前,Rust已经强迫我学习曾经那些在 C/C++中慢慢学会的好习惯。…我想强调,Rust不是几天内可以学习,以后再积累硬件/技术/好习惯那些东西的那种语言。你将被迫立即...
  • wowotuo
  • wowotuo
  • 2017-07-30 11:07:39
  • 611

Rust 循环借用

原文 https://exyr.org/2018/rust-arenas-vs-dropck/ 内容 所有权与借用是rust数据结构的的基础。然而,只有在创造变量之后才能取得其所有权(移动它...
  • guiqulaxi920
  • guiqulaxi920
  • 2018-02-22 14:35:51
  • 28

虚幻引擎4系列教程3(霜之小刀)(附视频)--游戏是需要逻辑的

虚幻引擎4系列教程3--游戏是需要逻辑支撑 --霜之小刀(转载请注明作者)   QQ:2279557541                 Email:lihn1011@163.com     ...
  • lihn1987
  • lihn1987
  • 2016-06-09 23:50:27
  • 675

Rust租借和生命周期深入剖析

资源的所有权和租借 Rust通过一个成熟的租借系统而不是GC来达到内存安全的目的。对于和种资源(栈内存,堆内存,文件句柄等),都确定只有一个拥有者来确保其正确的解构(如果资源需要解构的话)。你可以利...
  • feellin
  • feellin
  • 2016-03-09 13:02:55
  • 1520

Rust语言Ownership,Reference和Lifetime详解

Rust语言Ownership,Reference和Lifetime详解 Rust语言OwnershipReference和Lifetime详解 Ownership References and Bo...
  • renhuailin
  • renhuailin
  • 2015-06-12 14:22:44
  • 3485

rust学习笔记基础篇2--基础变量声明的基本规则(霜之小刀)

rust学习笔记基础篇2–基础变量声明的基本规则(霜之小刀) 欢迎转载和引用,若有问题请联系 若有疑问,请联系 Email : lihn1011@163.com QQ:...
  • lihn1987
  • lihn1987
  • 2018-04-15 00:14:21
  • 8

rust用struct保存特定trait的引用

结构体保存一个实现了某个trait的引用,只要是保存引用就必须显式的加lifetime,实现如下: (只是保存而已,记不住…)trait DeriveTrait{ fn hello(&sel...
  • varding
  • varding
  • 2015-08-31 12:37:38
  • 1087

rust学习笔记基础篇3--数组,切片,元组的变量声明(霜之小刀)

rust学习笔记基础篇3–数组,切片,元组的变量声明(霜之小刀) 欢迎转载和引用,若有问题请联系 若有疑问,请联系 Email : lihn1011@163.com Q...
  • lihn1987
  • lihn1987
  • 2018-04-15 01:51:46
  • 12

UE4新手引导之下载和安装虚幻4游戏引擎

1) 进入虚幻4的官方主页(https://www.unrealengine.com/) 这里你可以获得关于虚幻4的最新资讯,包括版本更新、博客更新、新闻和商城等。自2015年起,该引擎已经提供免费下...
  • monaso
  • monaso
  • 2017-02-16 13:50:55
  • 212
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 438
    排名: 11万+
    博客专栏
    最新评论