函数什么时候可以 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 {
我正在试验 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 {