You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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,提问作者Евгений Павлов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:35:24