搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
从前慢现在也慢
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Kubernetes — Flannel CNI_flannel v0.11.0队员cni plugin版本
2
数字人解决方案——LivePortrait实现表情姿态极速迁移
3
马赛克与目标清除工具分享(lama-cleaner)
4
Git常用命令show和status和config_git show
5
国产AI之光!KIMI大模型详细使用入门指南(非常详细)零基础入门到精通,收藏这一篇就够了_kimi从零基础到精通
6
Zookeeper+Dubbo集成基本准备环境搭建
7
python ERA5 画水汽通量散度图地图:风速风向矢量图、叠加等高线、色彩分级、添加shp文件、添加位置点及备注_python绘制水汽通量图
8
Spring Security6.x的登录验证_spring-security 6 配置userdetailsservice
9
45、SpringBoot文件上传到指定磁盘路径 及 上传成功后的文件回显_springboot上传文件到指定文件夹
10
Redis 作为缓存服务器的配置
当前位置:
article
> 正文
rust copy 和 clone 区别_rust copy clone 区别
作者:从前慢现在也慢 | 2024-08-09 03:22:37
赞
踩
rust copy clone 区别
参考资料
https://zhuanlan.zhihu.com/p/21730929
总结
Copy 和 Clone 两者的区别和联系有:
Copy内部没有方法,Clone内部有两个方法。
Copy trait 是给编译器用的,告诉编译器这个类型默认采用 copy 语义,而不是 move 语义。Clone trait 是给程序员用的,我们必须手动调用clone方法,它才能发挥作用。
Copy trait不是你想实现就实现,它对类型是有要求的,有些类型就不可能 impl Copy。Clone trait 没有什么前提条件,任何类型都可以实现(unsized 类型除外)。
Copy trait规定了这个类型在执行变量绑定、函数参数传递、函数返回等场景下的操作方式。即这个类型在这种场景下,必然执行的是“简单内存拷贝”操作,这是由编译器保证的,程序员无法控制。Clone trait 里面的 clone 方法究竟会执行什么操作,则是取决于程序员自己写的逻辑。一般情况下,clone 方法应该执行一个“深拷贝”操作,但这不是强制的,如果你愿意,也可以在里面启动一个人工智能程序,都是有可能的。
如果你确实需要Clone trait执行“深拷贝”操作,编译器帮我们提供了一个工具,我们可以在一个类型上添加#[derive(Clone)],来让编译器帮我们自动生成那些重复的代码。
然而Rust语言规定了当T: Copy的情况下,Clone trait代表的含义。即:当某变量let t: T;,符合T: Copy时, 它调用 let x = t.clone() 方法的时候,它的含义必须等同于“简单内存拷贝”。也就是说,clone的行为必须等同于let x = std::ptr::read(&t);,也等同于let x = t;。当T: Copy时,我们不要在Clone trait里面乱写自己的逻辑。所以,当我们需要指定一个类型是 Copy 的时候,最好顺便也指定它 Clone 的行为,就是编译器为我们自动生成的那个逻辑。正因为如此,在希望让一个类型具有 Copy 性质的时候,一般使用 #[derive(Copy, Clone)] 这种方式,这种情况下它们俩最好一起出现,避免手工实现 Clone 导致错误。
本文同步发布在微信公众号:
Rust编程
,欢迎关注。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/951171
推荐阅读
article
rust
裸
指针
_
rust
裸
指针
非
copy
...
rust
裸
指针
_
rust
裸
指针
非
copy
rust
裸
指针
非
copy
fn mai...
赞
踩
article
在
Rust
中使用裸
函数指针
_
rust
transmute
...
在
Rust
中使用裸
函数指针
_
rust
transmute
rust
transmute
...
赞
踩
article
计算机
裸
语言
教程,4.35.
裸
指针
-
Rust
程序设计
语言
...
Rust
的标准库中有一系列不同的智能
指针
类型,不过这有两个类型是十分特殊的。
Rust
的安全大多来源于编译时检查,不过...
赞
踩
article
【
Rust
日报
】
2021
-09-12
Rust
的
Logging
推荐
...
Rust
的
Logging
推荐
内容整理自 Reddit
的
讨论:What is the current recomm...
赞
踩
article
【
Rust
日报】
2
0
2
1-0
2
-
2
6 《
Rust
用于
web
开发
的
2
年后
感悟
》...
昨天,《
Rust
语言中文》社区推送
的
一篇公众号关于:
Rust
for
web
development:
2
years ...
赞
踩
article
Rust
程序设计
语言学习——
并发
编程
...
安全且高效地处理
并发
编程
是
Rust
的另一个主要目标。
并发
编程
(Concurrent programming),代表程...
赞
踩
article
探索
加速
之旅
:
simd
,
让
Rust
项目
飞起来!...
探索
加速
之旅
:
simd
,
让
Rust
项目
飞起来!
项目
地址:https://gitcode.com/Nugine/sim...
赞
踩
article
【
Rust
日报】2021-06-25
rsproxy
.
cn
-
字节
跳动
新
的
Rust
镜像源...
rsproxy
.
cn
-
字节
跳动
新
的
crates.io 和 rustup
的
国内镜像源
字节
跳动
的
小伙伴搞
的
,希望能帮...
赞
踩
article
【
Rust
日报
】 2019-06-23
:
【系列】
Rust
的
OOP
编程
研究...
sniffglue -
Rust
实现
的
网络嗅探器这个库
的
特点是多线程,可以充分利用多核。可以放心地用在不安全网络中(可...
赞
踩
article
C++
STL
copy
,
move
用法...
前向(从前向后的顺序)拷贝/移动操作,将一个容器元素拷贝/移动到另一容器中。
C++
STL
copy
,
move
用法 ...
赞
踩
article
Rust
在生产环境
中
的
应用
与实践
_
rust
应用
场景...
Rust
是一种多范式系统编程语言,它被设计用于构建可靠、高效且安全
的
软件。它
的
高性能编译器(
rust
c)和丰富
的
生态系...
赞
踩
article
git
init
报错
fatal
:
cannot
copy ‘/usr/share/
git
-cor...
git
init
报错
fatal
:
cannot
copy '/usr/share/
git
-core/template...
赞
踩
article
git
clone
命令详解_
git
clone
命令...
-single-branch, 只检查一个branch,要么是默认的master,要么是-b new_branch指定的...
赞
踩
article
git
常用
命令
之
clone
_
git
clone
命令
...
远程分支是只读的,不能修改。要想在本地修改,需要建立本地分支。
clone
命令
默认会根据远程默认分支建立本地分支。_gi...
赞
踩
article
【
git
】
git
初始化
与
克隆
(
git
init
与
git
clone
)
_
git
init
和
git
...
有两种取得 Git 项目仓库的方法。第一种是在现存的目录下,通过导入所有文件来创建新的 ,此为
git
初始化
,需要 命...
赞
踩
article
git
clone
命令_
git
clone
指令...
默认情况下,Git 会按照你提供的 URL 所指向的项目的名称创建你的本地项目目录。命令会自动将远程仓库的所有分支和历史...
赞
踩
article
git
clone
命令_
git
clone
目录
名字...
感谢原文作者:寻芝彬原文链接:https://www.jianshu.com/p/c992c799f2dd描述拷贝一个 ...
赞
踩
article
git
-
clone
/
init
_
git
clone
--
init
e...
three of the most popularGitSubversionMercurialTwo different...
赞
踩
article
git
init
_
git
clone 和
git
init
...
git
init
git
init
[-q | --quiet] [--bare] [--template=] [--s...
赞
踩
article
Git
常用命令
clone
和
init
和add_
git
init
clone
...
本文详细介绍了
Git
的三个常用命令:
clone
用于从远程仓库克隆到本地,
init
用于创建新的
Git
仓库,add则将文件添...
赞
踩
相关标签
rust
开发语言
后端
计算机裸语言教程
python
java
编程语言
大数据
数据库
spring
人工智能
thread
spawn
mutex
mpsc
channel
sync
docker
github
linux