Нет.
let x = myar[2];
действительно копирует значение 3
и сохраняет его в x
, а let x = &myar[2];
сохраняет ссылку на значение 3
в myar
.
Обратите внимание, что единственная причина, по которой let x = myar[2];
вообще работает, заключается в том, что i32
реализует трейт Copy
. Если бы у нас был массив, хранящий тип, который не реализует черту Copy
, вы бы вообще не смогли этого сделать. Например:
struct Number {
num: i32,
}
impl Number {
fn new(num: i32) -> Number {
Number { num }
}
}
// Note that Number does not implement the Copy trait
fn main() {
let number_list = [Number::new(1), Number::new(2), Number::new(3)];
// This does not work:
let _x = number_list[1];
// This does work:
let _x = &number_list[1];
}