【练习】rust中的复制语义和移动语义
1.基本类型都是复制语义的
fn main(){
let a = 123;
{
#[allow(unused_variables)]
let b = a; //如果是移动语义,那么后续的a将不再有效
}
println!("{:?}", a); //编译成功,说明a是复制语义
}
2.非基本类型是移动语义
fn main(){
let a = String::from("abc");
{
#[allow(unused_variables)]
let b = a; //如果是移动语义,那么后续的a将不再有效
}
println!("{:?}", a); //编译失败,说明a是移动语义
}
3.赋值给占位符,没有任何效果
fn main(){
let a = String::from("abc");
{
#[allow(unused_variables)]
let _ = a;
}
println!("{:?}", a); //编译成功,说明占位符并没有产生移动的效果
}
4.struct类型默认是移动语义
#[derive(Debug)]
struct MyStruct{
value: i64
}
fn main(){
let a = MyStruct{value:1234};
{
#[allow(unused_variables)]
let b = a;
}
println!("{:?}", a); //编译失败,说明a移动了
}
5.声明struct的复制语义
#[derive(Debug,Clone,Copy)]
struct MyStruct{
value: i64
}
fn main(){
let a = MyStruct{value:1234};
{
#[allow(unused_variables)]
let b = a;
}
println!("{:?}", a); //编译成功,说明a没有移动
}
【练习】rust中的复制语义和移动语义的更多相关文章
- Rust写时复制Cow<T>
写时复制(Copy on Write)技术是一种程序中的优化策略,多应用于读多写少的场景.主要思想是创建对象的时候不立即进行复制,而是先引用(借用)原有对象进行大量的读操作,只有进行到少量的写操作的时 ...
- 【译】理解Rust中的Futures(二)
原文标题:Understanding Futures in Rust -- Part 2 原文链接:https://www.viget.com/articles/understanding-futur ...
- Android中的复制粘贴
Android中的复制粘贴 The Clipboard Framework 当使用clipboard framework时,把数据放在一个剪切对象(clip object)里,然后这个对象会放在系统的 ...
- Rust 中的继承与代码复用
在学习Rust过程中突然想到怎么实现继承,特别是用于代码复用的继承,于是在网上查了查,发现不是那么简单的. C++的继承 首先看看c++中是如何做的. 例如要做一个场景结点的Node类和一个Sprit ...
- [置顶] js中如何复制一个对象,如何获取所有属性和属性对应的值
在js中如何复制一个对象,例如如下一个js对象. 如果知道这个对象的所有属性自然就可以重新new一个,然后对每个属性赋值,就可以做到,但如果不知道呢?如何创建一个内容相同 的对象呢? var obj= ...
- 在CMD命令行和PowerShell中实现复制粘贴功能
在CMD命令行和PowerShell中实现复制粘贴功能 常常使用命令行或者PowerShell的朋友肯定会遇到这样的情况:粘贴文本非常easy,右键--选择粘贴就可以,可是想要复制命令 ...
- JAVA中浅复制与深复制 - coolmist - ITeye技术网站
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- java中数组复制的两种方式
在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...
- Ruby中如何复制对象 (deep clone)(转载)
Ruby中如何复制对象 (deep clone) 用Ruby复制一个对象(object)也许没有你想像的那么容易. 今天我google了半天, 做个总结吧. 先从最简单的开始, b = a 是复制吗? ...
随机推荐
- Java面向对象~类和对象&方法,类方法
面向对象 概念: 1.同一类事物的抽象描述,不是具体的 2.类和对象的关系: 类 是抽象的. 对象 是具体的. 3.对象的体征,称为"属性&q ...
- JSONP是个嘛玩意?解决跨域问题?
浏览器同源策略 限制js向 其他域名发起请求,浏览器调试报错如下 JSONP 是一种解决方法 浏览器不会阻止带有src属性的标签发请求.所以可以常用的 <script src="xxx ...
- windows 2008 server 服务器远程桌面连接会话自动注销,在服务器上开掉的软件全部自动关闭的解决办法
windows 2008 server 服务器远程桌面连接会话自动注销,在服务器上开掉的软件全部自动关闭的解决办法:
- Xftp设置指定记事本(notepad++)打开文件
右键
- nim_duilib之virtualListbox用法(22)
概述 本文将介绍virtualListbox的用法. 更多请参考源码. 一个样式 样式丑了点,勿喷. 重写函数 使用virtualListbox, 需要一个派生类(继承自基类VirtualListIn ...
- 【LeetCode】242. Valid Anagram 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 字典统计词频 排序 日期 [LeetCode] 题目地址:ht ...
- 【LeetCode】347. Top K Frequent Elements 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 解题方法 字典 优先级队列 日期 题目地址:https://l ...
- 【LeetCode】241. Different Ways to Add Parentheses 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:递归构建所有表达式 方法二:分而治之 日期 ...
- 图的存储:邻接矩阵(C++)
1. 演示 无向图: 有向网: 2. 代码 1 #include <iostream> 2 #include <unordered_map> 3 #include <ve ...
- PLSQL到期处理
一.输入指令"regedit"打开注册表 二.指令输入完毕后,按回车键,会进入这个界面. 三.注册表里按HKEY_CURRENT_USER\Software\Allround Au ...