我正在阅读 Rust第二版电子书,在一个链接章节的代码片段中,如果我删除第3行的引用运算符 (&
),程序仍可以完美地工作。
let mut s1 = String::from("foo");
let s2 = "bar";
s1.push_str(&s2); // here
println!("s2 is {}", s2);
的值应按照书中所述移动。但是,如果我更改
s1.push_str(&s2);
为了
s1.push_str(s2);
以下代码应该会触发错误,但实际上没有发生任何错误:
println!("s2 is {}", s2);
文档片段:
清单8-16:将字符串切片添加到字符串后使用 如果 push_str 方法拥有了 s2 的所有权,我们将无法在最后一行打印出其值。但是,这段代码按照我们的期望工作!
我正在使用 Rust 1.24.1。
&str: Copy
,就像所有不可变引用一样。 - Shepmaster