函数什么时候可以 return 引用?

When can a function return a reference?

我正在试验 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 {