【发布时间】:2022-12-12 16:05:41
【问题描述】:
我在生锈的第一天,来自 php
我正在开发一些基本的控制台程序以获得对所有权的信心。
有没有办法确定将参数传递给函数调用是否会执行移动、复制、引用或 mut 引用?
我指的是结构s only,由我自己定义,暂时。
我指的是不返回值的函数。这对我来说是一个全新的话题
对于我现在能理解的
mystruct: &mut StructureOfMine明确是一个可变引用,所以如果在函数中我改变了 mystruct 的一个字段,它将反映在外面
mystruct: &StructureOfMine明确是一个非可变引用,所以在函数中我不能改变 mystruct 的字段
mystruct: StructureOfMine如果
StructureOfMine未实现复制,则移动mystruct。我可以更改mystruct,但调用者不能再使用 mystruct。如果
StructureOfMine正在实施复制,则复制mystruct。我可以更改mystruct;调用者使用其原始的 mystruct 副本,但对此副本的更改不会还原到原始副本中问题
你能证实/编辑我对这些案例的理解吗?
有没有办法确定是否复制或移动了某些内容?
【问题讨论】:
-
好像你回答了你自己的问题,
Copytypes 被复制,所有其他类型都被移动。&是不可变引用,&mut是可变引用。 -
无法确定某些内容是否已被复制或移动,因为这对任何人都没有影响;既不是传递给它的函数,也不是外部函数。
-
@realtebo “弄清楚”的方法是对其进行编程并查看它是否编译。如果它编译,它就是一个副本,因为稍后使用移动的对象是一个编译错误。你不能在 Rust 中导致未定义的行为,这都是编译器错误。
-
也许您来自 C++ 背景,您必须积极确保不重复使用移动的对象;这在 Rust 中不是问题,因为实际上不可能偶然做到这一点。
-
@Finomnis,没有 C++ 经验;我正在学习 Rust 正是因为我不知道 C 和 C++,我想学习一些东西 <> PHP