rust - 函数什么时候可以返回引用?

标签 rust reference ownership

我正在尝试Rust,发现了我无法理解的怪异之处。通常,编译器会禁止函数返回没有静态生存期的引用(例如String&'static str,但绝不要&str)。

但是,此代码编译并工作:

fn f(_: &Vec<u8>) -> &str {
    "Hello, world!"
}

而此代码没有:
fn f() -> &str {
    "Hello, world!"
}

当第一个函数返回对下降值的引用时,为什么它起作用?

最佳答案

这是lifetime elision在没有输入参数的函数上不起作用。

第一种方法扩展为:

fn f<'a>(_: &'a Vec<u8>) -> &'a str {

第二种方法是链接文档中的“ILLEGAL”示例。

因此,您必须自己定义它:
fn f<'a>() -> &'a str {

...或静态:
fn f() -> &'static str {

关于rust - 函数什么时候可以返回引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61182643/

相关文章:

vector - 可以从迭代器中收集 &mut 吗?

rust - 用不同大小的类型调用 transmute

reference - 为什么我可以返回对局部文字的引用而不是变量?

rust - 如果我为引用类型实现 `TryFrom`,为什么在 Rust 中不会发生自动借用?

c++ - 获取对 std::list 中最后两个元素的引用

c++ - 用户定义类型的 vector

c++ - 在 C++11 中有没有一种好方法可以将对其他对象的引用存储为成员?

rust - 有没有办法在 Option 中拆分变量而不必使用 if 语句?

sorting - 按结构字段对向量进行动态链式排序

module - Rust 无法将 Singleton 从全局空间导入另一个文件中的另一个模块