Rust 中的字符是 Unicode 类型,因此每个字符占据 4 个字节内存空间,但字符串不一样,字符串是 UTF-8 编码,也就是字符串中的字符所占的字节数是变化的(1 - 4)。
常见的字符串有两种:
- str,通常是引用类型,
&str,即字符串字面常量,字符串切片。 - std::string::String
类型&str的变量是被硬编码的,快速而高效,但不可变;类型String,是可设可变的,它是在堆上的变量,如何管理内存,有的语言用垃圾回收机制(Garbage Collection),标记使用情况并自动清理;而Rust不愿意用GC,既要高性能,又要高安全性,提出变量离开作用域即自动释放其占用的内存,比GC思路更妙。
C语言中清理内存的函数free,要被手动调用;Rust中则是drop(),Rust自动调用。
C++中的Resoure Acquisition Is Initialization,RAII模型。
两种字符串类型互转
&str转String:
let a = String::from("hello, world");
"hello, world".to_string();
String转&str,引用即可
fn main() {
let s = String::from("hello,world!");
say_hello(&s);
say_hello(&s[..]);
say_hello(s.as_str());
}
fn say_hello(s: &str) {
println!("{}",s);
}
除上述两种类型,Rust标准库还有其他类型的字符串。
字符串不能被直接索引
Rust字符串不允许索引操作。由于不同字符占用字节数不等,考虑操作时间复杂度不能实现O(1)。
//三个字节
let a =

最低0.47元/天 解锁文章
1117

被折叠的 条评论
为什么被折叠?



