gpt4 book ai didi

rust - 为什么 &v[1] + &v[2] 与 Rust 中的 v[1] + v[2] 具有相同的结果?

转载 作者:行者123 更新时间:2023-11-29 08:23:37 27 4
gpt4 key购买 nike

我正在学习所有权和借用。

borrow1borrow2 的区别在于在borrow2 打印时使用了&:

fn borrow1(v: &Vec<i32>) {
println!("{}", &v[10] + &v[12]);
}

fn borrow2(v: &Vec<i32>) {
println!("{}", v[10] + v[12]);
}

fn main() {
let mut v = Vec::new();

for i in 1..1000 {
v.push(i);
}

borrow1(&v);
println!("still own v {} , {}", v[0], v[1]);

borrow2(&v);
println!("still own v {} , {}", v[0], v[1]);
}

为什么它们给出相同的输出,即使 borrow1 没有 &

最佳答案

[] 的索引运算符 ( Vec<T> )返回 T .在这种情况下,这是一个 i32 .因此 v[0]返回 i32&v[0]返回 &i32 :

let a: i32 = v[0];
let b: &i32 = &v[0];

v[0]仅适用于 i32工具 Copy .

i32已实现Add对于 ( i32 , i32 ) 的(左侧,右侧)对和 ( &i32 , &i32 ) .这两个实现以相同的方式添加值,因此您会得到相同的结果。

另见:

关于rust - 为什么 &v[1] + &v[2] 与 Rust 中的 v[1] + v[2] 具有相同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48142322/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com