rust - 临时值被释放不一致

标签 rust

为什么这会产生“释放临时值”错误:

    let mut new_string = String::from("test");
    new_string.push_str(
        if true { &format!("{}","ay") } else { "ay" }
    );

有效时:
    let mut new_string = String::from("test");
    new_string.push_str(
        &format!("{}","ay")
    );

游乐场Link

最佳答案

format!返回一个String(不带&),因此为您提供返回值的所有权。您可以说当前块拥有它。然后将其放在当前块的末尾。


let mut new_string = String::from("test");
new_string.push_str(
    if true { &format!("{}","ay") } else { "ay" }
);

这是{ &format!("{}","ay") }。在}可以使用它之前,将其丢弃在push_str上。


let mut new_string = String::from("test");
new_string.push_str(
    &format!("{}","ay")
);

它生命周期足够长。
new_string.push_str( {&format!("{}","ay")} );之所以有效,是因为花括号已被优化。
new_string.push_str( {
    let t = &format!("{}","ay");
    t
} );

不起作用。

关于rust - 临时值被释放不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59119779/

相关文章:

rust - 创建一个临时的,在使用时被释放

types - 如何在 Rust 中创建包装向量的新实例?

rust - 如何通过链接器-rlink参数?

rust - 为什么生命周期对 slice::from_raw_parts 很重要?

rust - 为什么在尝试使用外部宏的参数调用内部宏时得到 "unexpected token"?

rust - 如何将整数和浮点值相乘并在 Rust 中将结果显示为浮点值?

arrays - 在 Rust 中传递数组的数组(或切片的切片)

rust - 使用移动匹配变量的匹配语句引发编译器错误

rust - 插入排序算法给出溢出错误

floating-point - 将字节转换为 float 是安全的还是会产生未定义的行为?