为何str被称为字符串切片,而&str才是实际的字符串切片?
关于Rust中
str与&str命名的疑问解答 str是Rust里的动态大小类型(DST),它本质上代表一段UTF-8编码的字符序列,但本身不存储任何元数据(比如长度、内存地址)。你没法直接声明一个str类型的变量,因为编译器不知道要给它分配多少内存空间——它就是个“裸”的字符序列定义。- 我们日常说的“字符串切片”,其实是
&str类型。因为&str是对str的引用,这个引用里包含了两个核心信息:指向字符序列的指针,以及序列的长度。有了这俩信息,我们才能安全地操作这段字符串,比如取长度、遍历字符、切片等。 - 至于
str为啥被叫做“字符串切片”,这是Rust的类型命名逻辑:str是字符串切片的底层基础类型,就像[T]是数组切片的底层DST类型一样。&[T]是我们实际用的数组切片,对应&str就是实际用的字符串切片——底层的DST类型被用来定义切片的本质,而它的引用才是可实例化、可操作的切片实例。 - 举个实际例子:你写的静态字符串
"hello world",它的真实类型是&'static str——也就是对程序二进制文件里一段str的静态生命周期引用;当你调用String的as_str()方法时,得到的也是&str,也就是对String内部存储的str的引用。
内容的提问来源于stack exchange,提问作者Евгений Павлов
相关产品推荐
相关产品推荐

