Tverous
Tverous

Reputation: 113

Why I can still access a vector's element after taking ownership of it without using reference?

fn main() {
    let number_list = vec![1, 2, 3, 4, 5];

    let n = number_list[0];
    let r = &number_list[0];

    println!("{} : {} : {} : {}", n, r, number_list[0], &number_list[0]);
}

The output is:

1 : 1 : 1 : 1

Another question is what is the difference between vector indexing with a reference and a non-reference except taking the reference?

Upvotes: 2

Views: 745

Answers (1)

Shepmaster
Shepmaster

Reputation: 432139

You have a vector of integers (i32 to be specific), and i32 implements the Copy trait.

The index syntax returns a dereferenced value. Since the indexed type implements Copy, the compiler copies it implicitly.

You cannot take ownership of an item from a vector using the indexing syntax at all.

what is the difference between vector indexing with a reference and a non-reference except taking the reference

Without the &, the value is copied (but only because it implements Copy). With the &, you have a reference to the value inside the vector.

Upvotes: 7

Related Questions