Rust 关于锈菌的所有权
我有一个关于铁锈所有权的问题 我没有使用过Rust,但我知道Rust有一个所有权概念,Rust通过所有权管理内存。 我了解到,生锈会阻止在编译时访问无效内存 如果有如下代码Rust 关于锈菌的所有权,rust,ownership,Rust,Ownership,我有一个关于铁锈所有权的问题 我没有使用过Rust,但我知道Rust有一个所有权概念,Rust通过所有权管理内存。 我了解到,生锈会阻止在编译时访问无效内存 如果有如下代码 let s1 = String::from("hello"); let s2 = s1; println!("{}, world!", s1); 它可能显示错误,因为s1是无效内存 在这里,我想知道下面这个例子的结果 let s1 = String::from("hell
let s1 = String::from("hello");
let s2 = s1;
println!("{}, world!", s1);
它可能显示错误,因为s1是无效内存
在这里,我想知道下面这个例子的结果
let s1 = String::from("hello");
if(The condition that can't know in compile time)
let s2 = s1;
println!("{}, world!", s1);
if条件可能是rand或用户输入等
如果执行if语句,则s1将移动到s2,并在if语句结束时将其删除。
在这种情况下,访问println上的s1将生成错误
但如果不执行if语句,则访问s1是有效的。
在这种情况下,锈是如何起作用的
谢谢阅读。这种情况影响不大。由于IF可以移动S1,编译器必须考虑它为余下的范围移动。 关于: 错误[E0382]:移动值的借用:`s1` ->src/lib.rs:10:28 | 5 |设s1=String::fromhello; |-发生移动是因为's1'的类型为'std::string::string',而该类型未实现'Copy'特性 6 |如果std::env::args.next==无{ 7 |设_s2=s1; |-价值转移到这里 ... 10 | println{},world!,s1; |^^移动后在此借用的价值
如果您需要一个可能已从中移动的值,请使用。@jjw如果您感兴趣,Rust将允许您在If块后使用moved from变量,如果您将其替换为以下内容:
fn main() {
let s1 = String::from("hello");
if std::env::args().next() == None { // runtime check
let _s2 = s1;
}
println!("{}, world!", s1);
}