0Pricing
Mojo Academy · 课时

复制与移动语义

了解值如何被复制或移位

复制与移动语义 是 CoddyKit 上的免费 Mojo Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Mojo Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Mojo Academy 课程共包含 4 节课。

传递值的两种方式

值在程序中传递时,Mojo 可以<强>复制它,也可以<强>移动它。了解实际发生的方式,有助于您判断开销。🔁

什么是复制

<强>复制会创建一个全新且独立的值。原始值和副本都会继续存在,各自拥有自己的数据。

var a = MyType(1)
var b = a   # copy: a still valid

什么是移动

<强>移动会重新安置值,而不是复制它。数据被交出后,源值不再使用。

为什么移动更省成本

复制可能会复制堆上的数据,而<强>移动只会转移现有数据的所有权。对于大型值,这可以节省实际工作量。

赋值通常会复制

Mojo 中的普通赋值默认会进行<强>复制,因此每个变量都拥有自己的值。这使值语义安全且可预测。

触发移动

您可以使用转移运算符(即 <强>插入号)来请求移动。它告诉 Mojo 交出该值,而不是复制它。

var b = a^   # move a into b

源值已被消耗

移动后,源变量会被<强>消耗。Mojo 不允许您再次读取它,从而避免使用过时或无效的数据。

复制会让两者都保持有效

相比之下,复制后两个变量都可以正常使用。它们彼此<强>独立,因此修改其中一个不会影响另一个。

编译器会智能决定

当源值不再需要时,Mojo 还可以自动将复制转换为移动,这项优化会在不显眼的情况下节省<强>工作量。

关注成本会带来收益

考虑复制与移动的区别,可以避免意外复制大型缓冲区。这是编写<强>高效 Mojo 代码的第一步。

由您保持控制

Mojo 提供安全的默认行为,同时允许您在追求速度时选择<强>移动。您可以根据每个时刻的需要选择行为。

快速检查

让我们测试一下复制与移动的区别。

回顾

复制会创建独立的副本,而<强>移动会以低成本转移所有权,并消耗源值。现在,您可以预测这两种行为了。🎯

常见问题解答

「复制与移动语义」课时是免费的吗?

是的 — 「复制与移动语义」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Mojo Academy 课程的其余内容,请升级到 CoddyKit PRO。 Mojo Academy 课程共包含 4 节课。

「复制与移动语义」这节课中我会学到什么?

了解值如何被复制或移位 你通过在浏览器中直接运行的动手代码来练习 Mojo Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Mojo Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Mojo Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「复制与移动语义」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Mojo Academy 课中编写并运行代码吗?

能。每节 Mojo Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 复制与移动语义
  2. __copyinit__ 方法
  3. __moveinit__ 方法
  4. 析构与 __del__
← 返回 Mojo Academy