为什么这段代码会抛出错误:
const MSG: &str = "Hello";
fn one_of(_first: &str, _second: &str) -> &str {
MSG
}
我向我的铁杆朋友(gpt-4-1106-preview)问了这个问题,他回答说:
该代码会抛出错误,因为 Rust 无法保证引用的字符串的生存
MSG
时间足够长,足以安全地使用函数返回的引用one_of
好吧,好吧,那么为什么这个函数不会导致错误:
const MSG: &str = "Hello";
fn one(_first: &str) -> &str {
MSG
}
我朋友回复:
当声明函数时
one
未显式指定返回引用的生存期时,编译器将使用生存期推断并发现返回值MSG
具有静态生存期。因此,编译器假定该函数返回具有静态生命周期的引用,并且此推论与输入参数的生命周期兼容(在本例中忽略该参数,因为它不用于确定返回值的生命周期) )。
我的合理反对:
但是在 one_of 的情况下,编译器可以自动为该函数分配静态生命周期,就像在 one 的情况下一样,为什么您所说的有关 one 的所有内容在 one_of 函数的情况下都无效?
我的朋友终于崩溃了,开始为“造成的混乱”道歉,并表示这两个函数不应该导致错误(即使它们没有)。
我们需要生物神经网络的帮助,那就是你,亲爱的皮革和骨头朋友!解释一下主题