当我在Rust中使用这段代码时:
fn main() {
let s = String::from("hello").as_str();
println!("slice: {}", s);
}
字符串
编译器显示错误:
temporary value dropped while borrowed
creates a temporary value which is freed while still in userustcClick for full compiler diagnostic
main.rs(2, 43): temporary value is freed at the end of this statement
main.rs(3, 27): borrow later used here
main.rs(2, 5): consider using a `let` binding to create a longer lived value: `let binding = String::from("hello");
`, `binding`
型
as_str是否没有复制值?我认为s
将活到主函数结束。为什么还要说那个万岁的问题呢?
1条答案
按热度按时间fykwrbwg1#
as_str是否没有复制值?
不,这正是
String
和&str
之间的区别。String
拥有值,&str
只是引用。&str
不能拥有值,它只引用String
。由于您没有将String
存储在变量中,因此当&str
仍然存在时,它会被删除,从而导致错误。你的代码相当于这个:
个字符
如果将
String
存储在变量中,它可以正常工作:的字符串
关于
String
和str
的区别的更多信息可以在这里找到:What are the differences between Rust'sString
andstr
?