小编ge9*_*7aa的帖子

Rust 中切片和引用之间的关系是什么?

我对 Rust 完全陌生(就像我昨天才开始研究它一样),并且正在研究“Rust 编程语言”。我对第 4.2 章(参考文献和借用)/4.3(切片类型)有点卡住,在继续之前,我试图巩固我对参考文献的初步理解。我是一位经验丰富的程序员,背景主要是 C++(我非常熟悉多种语言,但 C++ 是我最熟悉的)。

考虑以下 Rust 代码:

let string_obj: String = String::from("My String");
let string_ref: &String = &string_obj;
let string_slice: &str = &string_obj[1..=5];
Run Code Online (Sandbox Code Playgroud)

根据我的理解,从第一行开始,是一个存储在堆栈上的string_obj类型的对象,它包含三个字段:(1)指向文本“My String”的指针,分配在堆上,以UTF-8编码String; (2)长度字段,值为9;(3) 容量字段的值 >= 9。这很简单。

第二行string_ref是对对象的不可变引用String,也存储在堆栈上,其中包含单个字段 - 指向 的指针string_obj。这让我相信(抛开所有权规则、语义以及我尚未了解的有关引用的其他内容),引用本质上是指向其他对象的指针。再说一次,非常简单。

这是第三行,让我有些头疼。从文档中可以看出,它string_slice是一个存储在堆栈上的类型的对象&str,并且包含两个字段:1)指向与 关联的文本“My String”内的文本“y Str”的指针string_obj。2) 长度字段值为 5。

但是,至少从表面上看,该&str类型根据定义是对类型对象的不可变引用str。所以我的问题如下:

  1. an到底str什么,它在内存中是如何表示的?
  2. 认为引用&str类型只是一个指针,它如何包含两个字段(一个指针和一个长度)?
  3. Rust 通常如何知道在构造引用时要创建哪些/多少个字段?(那么程序员怎么知道呢?)

string reference slice rust

6
推荐指数
1
解决办法
773
查看次数

标签 统计

reference ×1

rust ×1

slice ×1

string ×1