|
|
|
@ -248,14 +248,15 @@ println!("x = {}, y = {}", x, y);
|
|
|
|
|
|
|
|
|
|
Rust 有一个叫做 `Copy` 的特征,可以用在类似整型这样在栈中存储的类型。如果一个类型拥有 `Copy` 特征,一个旧的变量在被赋值给其他变量后仍然可用。
|
|
|
|
|
|
|
|
|
|
那么什么类型是可 `Copy` 的呢?可以查看给定类型的文档来确认,不过作为一个通用的规则:**保存在栈上的数据类型可以 `Copy`,任何基本类型的组合可以 `Copy` ,不需要分配内存或某种形式资源的类型是 `Copy` 的**。如下是一些 `Copy` 的类型:
|
|
|
|
|
那么什么类型是可 `Copy` 的呢?可以查看给定类型的文档来确认,不过作为一个通用的规则:**任何基本类型的组合可以 `Copy` ,不需要分配内存或某种形式资源的类型是可以 `Copy` 的**。如下是一些 `Copy` 的类型:
|
|
|
|
|
|
|
|
|
|
* 所有整数类型,比如 `u32`。
|
|
|
|
|
* 布尔类型,`bool`,它的值是 `true` 和 `false`。
|
|
|
|
|
* 所有浮点数类型,比如 `f64`。
|
|
|
|
|
* 字符类型,`char`。
|
|
|
|
|
* 元组,当且仅当其包含的类型也都是 `Copy` 的时候。比如,`(i32, i32)` 是 `Copy` 的,但 `(i32, String)` 就不是。
|
|
|
|
|
|
|
|
|
|
* 引用类型,例如[转移所有权](#转移所有权)中的最后一个例子
|
|
|
|
|
|
|
|
|
|
## 函数传值与返回
|
|
|
|
|
将值传递给函数,一样会发生 `移动` 或者 `复制`,就跟 `let` 语句一样,下面的代码展示了所有权、作用域的规则:
|
|
|
|
|
```rust
|
|
|
|
|