我正在尝试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/