深入理解字符串切片 (&str) 与数组切片 (&[T]),如何通过胖指针 (Fat Pointer) 高效安全地操作子序列数据。
1. 什么是切片?
切片是没有所有权的数据类型,它引用集合中一段连续的元素序列。在底层,切片是一个 胖指针 (Fat Pointer),包含:
- 指向数据首地址的裸指针。
- 切片的长度 (Length)。
fn first_word(s: &str) -> &str {
let bytes = s.as_bytes();
for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return &s[0..i]; // 零拷贝切片视图
}
}
&s[..]
}
2. 字符串字面量的本质
所有的字符串字面量(如 let s = "Hello";)其类型都是 &str,直接指向编译产物二进制中的只读数据段,完全不需要在堆上开辟内存。