gpt4 book ai didi

rust - 关于引用和借用 The Rust 书的解释

转载 作者:行者123 更新时间:2023-11-29 08:31:28 26 4
gpt4 key购买 nike

我正在阅读 Rust 书和第 4 章中的引用和借用,这对我来说似乎不一致。在 Reference and Borrowing ,下图4-5显示s指向s1,而不是堆上的实际数据。

fn main() {
let s1 = String::from("hello");

let len = calculate_length(&s1);

println!("The length of '{}' is {}.", s1, len);
}

fn calculate_length(s: &String) -> usize {
s.len()
}

Figure 4-5: A diagram of &String s pointing at String s1

但是在String Slices , 该图清楚地表明 world 引用了实际数据,尽管只是其中的一部分。它还表示以下代码“类似于对整个字符串的引用,但带有额外的 [0..5] 位。它不是对整个字符串的引用,而是对字符串的一部分的引用。”

fn main() {
let s = String::from("hello world");

let hello = &s[0..5];
let world = &s[6..11];
}

下面是解释上述代码的图表(图 4-6): String slice referring to part of a String

现在我想我的问题是为什么 world 在 String Slices 的情况下不引用 s?我知道 world 不能只指向 s 因为那样它就无法获得最后 5 个字母。但这两个图在我看来完全不同,但它们都是“引用”。有人可以提供一种合乎逻辑的方式来理解它吗?

谢谢!

最佳答案

那么,&[mut] String 在安全上下文中保证什么?

  • 指针后面有一个 String,因此它支持您的第一个图表。

那么,&[mut] str 在安全上下文中保证什么?

  • String 的想法相同,即有一个 str在指针后面。但是,这是什么意思? str 到底是什么?

根据文档页面:

A &str is made up of two components: a pointer to some bytes, and a length.

意思是,&str 实际上是指向某个有效 utf-8 和长度的指针,所以实际上,str 是数据本身,不是 StringString 可以看作是一个可操作的str。所以 &my_string[..] 实际上是对 String 下数据的指针/引用。

关于rust - 关于引用和借用 The Rust 书的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56712045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com