- 此问题在此处已有答案**:
Why can I return a reference to a local literal but not a variable?(1个答案)
11天前关闭。
我正在Rust中学习引用和切片,所以尝试写一些随机代码:
fn main() {
let a = &[&[2]][..];
println!("{:?}", a); // OK
let b = 2;
let c = &[&[b]][..];
println!("{:?}", c);
// error[E0716]: temporary value dropped while borrowed
// --> src/main.rs:6:16
// |
// 6 | let c = &[&[b]][..];
// | ^^^ - temporary value is freed at the end of this statement
// | |
// | creates a temporary which is freed while still in use
// 7 | println!("{:?}", c);
// | - borrow later used here
// |
// help: consider using a `let` binding to create a longer lived value
// |
// 6 ~ let binding = [b];
// 7 ~ let c = &[&binding][..];
// |
// For more information about this error, try `rustc --explain E0716`.
// error: could not compile `playground` due to previous error
}
我不知道为什么把&[2]
改成&[b]
会出现上面的错误,请你给我解释一下。
作为一个新手,我很难把我的问题解释得更清楚。对不起,伙计们!!
1条答案
按热度按时间lawou6xi1#
这些作品看起来很相似,但实际上却大不相同:
像
[2]
这样的静态数组是编译器可以并且将要放入二进制文件中的东西。从局部变量
[b]
创建的数组必须在运行时通过将b
的值复制到其中来动态创建。