Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

rust - 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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...