Merge pull request #444 from liewhite/main

完善切片引用的描述
pull/448/head
孙飞Sunface 3 years ago committed by GitHub
commit a66f9f4144
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -26,6 +26,12 @@ error[E0277]: the size for values of type `str` cannot be known at compilation t
总之,我们可以总结出一个结论:**在 Rust 中,所有的切片都是动态类型,它们都无法直接被使用**。 总之,我们可以总结出一个结论:**在 Rust 中,所有的切片都是动态类型,它们都无法直接被使用**。
### 为什么切片是动态类型
很简单,切片就是一个未知长度的数组,前面已经讲过, 未知长度的类型是不能分配在栈上的, 所以你不能用 `let s: [T] = ...` 的形式来声明一个栈上的变量。 那么有什么办法来使用数组呢?
1. 固定长度数组, 声明时带上长度: `let a: [i8;4] = [1,2,3,4];`
2. 对于不固定长度的, 使用切片引用,切片引用类似于`trait object`,也是一个胖指针, 包含了切片的起始位置和长度,这样一来因为切片引用的大小是固定的(一个起始位置,一个长度,当然大小固定啦),也就能在栈上分配了。
那么问题来了,该如何使用切片呢? 那么问题来了,该如何使用切片呢?
## 切片引用 ## 切片引用
@ -46,7 +52,7 @@ let s3: &[i32] = &arr[1..3];
## 总结 ## 总结
我们常常说使用切片,实际上我们在用的是切片的引用,我们也在频繁说使用字符串,实际上我们在使用的也是字符串切片的引用。 我们常常说使用切片,实际上我们在用的是切片的引用,我们也在频繁说使用字符串,实际上我们在使用的也是字符串切片的引用。
总之,切片在 Rust 中是动态类型 DST是无法被我们直接使用的而我们在使用的都是切片的引用。 总之,切片在 Rust 中是动态类型 DST是无法被我们直接使用的而我们在使用的都是切片的引用。
| 切片 | 切片引用| | 切片 | 切片引用|
| --- | --- | | --- | --- |

Loading…
Cancel
Save