为什么String::from(&str)和&str.to_string()在Rust中表现不同?

fn main() {
   let string = "Rust Programming".to_string();
   let mut slice = &string[5..12].to_string();       // Doesn't work...why?
   let mut slice = string[5..12].to_string();        // works
   let mut slice2 = String::from(&string[5..12]);    // Works

   slice.push('p');
   println!("slice: {}, slice2: {}, string: {}", slice,slice2,string);
}

这里发生了什么?请解释。

回答

这里的主要问题是&优先级低于方法调用。

所以,实际代码是

let mut slice = &(string[5..12].to_string());

因此,您引用了临时 String 对象的引用,该对象已删除且以后无法使用。


以上是为什么String::from(&str)和&str.to_string()在Rust中表现不同?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>