enhance:增补Rust所有权文章。
This commit is contained in:
parent
5329767b0e
commit
32656236bb
|
@ -327,8 +327,8 @@ fn f(p: &'static i32) {
|
|||
|
||||
```rust
|
||||
fn largest(arr: &[i32]) -> &i32 {
|
||||
let mut s = &v[0];
|
||||
for r in &v[1..] {
|
||||
let mut s = &arr[0];
|
||||
for r in &arr[1..] {
|
||||
if *r > *s {
|
||||
s = r;
|
||||
}
|
||||
|
@ -337,11 +337,23 @@ fn largest(arr: &[i32]) -> &i32 {
|
|||
}
|
||||
```
|
||||
|
||||
这个示例主语表达了在Rust中,如果一个函数接受一个引用作为参数并返回一个引用的时候,Rust会假设两个引用会具有相同的生命期。这个函数的完整写法是下面这样的。
|
||||
这个示例主要表达了在Rust中,如果一个函数接受一个引用作为参数并返回一个引用的时候,Rust会假设两个引用会具有相同的生命期。这个函数的完整写法是下面这样的。
|
||||
|
||||
```rust
|
||||
fn largest<'a>(arr: &'a [i32]) -> &'a i32 {
|
||||
// ...
|
||||
'b: {
|
||||
let mut s = &'a arr[0];
|
||||
for r in &arr[1..] {
|
||||
'c: {
|
||||
if *r > *s {
|
||||
s = r;
|
||||
}
|
||||
}
|
||||
}
|
||||
// s在这里的生命期属于'b,但其指向的地址的生命期属于'a
|
||||
// 所以移交所有权是没有问题的,但是如果改成移交引用,就会出现问题
|
||||
s
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user