rust 中的字符串
HumphreyDan计算机如何存储解析字符序列的
- 计算机按字节(8位)顺序存储
- 字节可以代表任意对象。只不过我们可以把某些字节转化为人可理解的对象。这也就是 ASCII / Unicode 码表的功能.
- 字符串就是一系列可以通过码表进行解析的字节序列. 在 rust 中我们常用
String
,str
,&str
,&String
,Box<str>
,Box<&str>
等实现。
C 语言中是这样处理字符串的.
1 | char string[] = "banana"; // c 在末尾添加 `\0` |
rust 不使用 null-terminated 字符串主要还是性能优化考量。
str
C 的字符串内部没有强制编码类型。内部只是以 null terminator 结尾的字节序列. JS 使用 UTF-16 编码字符串,而 Rust 使用 UTF-8 编码字符串。
rust 中最常见的就是字符串切片: &str, &'static str, &'a str
.
rust 中的切片最终都会落脚到动态大小类型 (DST).也就是他们实现了 !Sized
trait 或者没有实现 Sized
trait
1 | let string: Box<str> = Box::new(*"akaka"); |
此处是无法获取动态类型大小的,因为解引用需要获取当前所指向的数据的所有权。
引用就是一个指针的大小(usize) std::mem::size_of::<&str>()
评论
匿名评论隐私政策