为什么错误“临时值在借用时被丢弃”只出现在两段非常相似的Rust代码中的一段中?[重复]

e3bfsja2  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(87)
    • 此问题在此处已有答案**:

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]会出现上面的错误,请你给我解释一下。
作为一个新手,我很难把我的问题解释得更清楚。对不起,伙计们!!

lawou6xi

lawou6xi1#

这些作品看起来很相似,但实际上却大不相同:
[2]这样的静态数组是编译器可以并且将要放入二进制文件中的东西。
从局部变量[b]创建的数组必须在运行时通过将b的值复制到其中来动态创建。

相关问题