gpt4 book ai didi

rust - 为什么我不能从函数返回指向字符串的链接,但我可以切片吗?

转载 作者:行者123 更新时间:2023-12-01 22:55:14 25 4
gpt4 key购买 nike

我正在阅读最初的 Rust 指南。并且表明不可能从函数返回对字符串的引用。

fn dangle() -> &String { // dangle returns a reference to a String

let s = String::from("hello"); // s is a new String

&s // we return a reference to the String, s
} // Here, s goes out of scope, and is dropped. Its memory goes away.
// Danger!

但我对下一章的示例感到困惑,其中从函数返回到 slice 的链接:

fn first_word(s: &String) -> &str {
let bytes = s.as_bytes();

for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return &s[0..i];
}
}

&s[..]
}

我明白为什么不可能从函数返回一个字符串的链接,但是为什么可以用这种方式返回一个切片的链接?因为字符串本身是通过引用传递的,或者这不是原因吗?我是初学者,如果有人帮助我理解这里发生的事情,我会很高兴。

最佳答案

在第一种情况下,您将返回对局部作用域的临时变量的引用。这不好,如前所述,该值将被删除,这会使任何引用无效。

在第二种情况下,您将返回对参数中提供的数据的引用,其生命周期在函数之外,所以没问题。返回值的生命周期是调用者参数的生命周期,无论它是什么。

关于rust - 为什么我不能从函数返回指向字符串的链接,但我可以切片吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73408622/

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