课程名称:轻松实现Rust系统入门,实战编译器开发
课程章节: 9.6 Rust 中的多种字符串 String
主讲老师:叶枭
课程内容:
今天学习的内容是 Rust 中的字符串类型。
字符串类型是一个非常基础和重要的数据类型。
Rust 中表示字符串类型的方式有多种,和其他语言有很大的区别。本节课学习最常用的两种,分别是 &str
和 String
。
直接使用字符串字面量声明的字符串类型,属于 &str
字符串引用类型。
let s = "hello world";
变量 s
就是 &str
类型。
字符串引用类型的内容保存在数据段中,数据段可以理解为一个 存储数据且数据不发生改变 的区域。比如示例中这个字符串值,在程序的运行过程中是不会发生改变的。
有多种方式定义 String 类型的字符串,最常用的是 String::from。
let str = String::from("hello world");
String 类型的字符串,具有所有权,存在堆内存中。而上面 &str
类型的字符串只是一个引用,不存在所有权。
在给函数传参时,一种约定俗成的惯用的方式是:如果参数是字符串类型,参数类型定义为字符串的引用类型。这样在调用函数时,即可以传递字符串引用,也可以使用使用 &
运算符来传递一个 String
类型的字符串。
fn echo (s: &str) { println!("{:?}", s) } fn main() { let s = "hello"; let t = String::from("world"); echo(s); echo(&t); }
定义结构体时,成员如果是字符串类型,要使用 String
类型:
因为定义结构体时,并不知道该成员的值的大小,只能在将来赋值时动态创建一个字符串值。
struct User { // 错误的 // name: &str, // 正确的 name: String }
课程收获
这节课学习了 Rust 中的字符串类型,对于新接触 Rust 的开发者不是很容易一下子就弄懂,因为涉及到底层的内存分配的知识。可以通过使用场景进行简单的分辨,比如在函数传参时使用字符串引用 &str
,在定义结构体时使用 String
。