我必须实现一个将两个数字相加的函数:
fn add(x: &i32, y: &i32) -> i32 {
println!("x is: {}, y is {}", x, y);
println!("*x is: {}, *y is {}", *x, *y);
x + y
}
fn double(x: i32) -> i32 {
add(&x, &x)
}
fn main() {
assert_eq!(double(5), 10);
println!("Success!");
}
Run Code Online (Sandbox Code Playgroud)
输出是:
x is: 5, y is 5
*x is: 5, *y is 5
Success!
Run Code Online (Sandbox Code Playgroud)
根据我的理解,该add函数不应该能够执行,x+y因为它们都是地址。仅*x + *y当它取消引用地址并提供存储在那里的值时才应该起作用。然而,这两个语句产生相同的结果。这是为什么?
特征Add(operator +) 是为&i32s 以及i32s 实现的。事实上,你可以有任何组合:
他们都做同样的事情,都是为了方便。
也可以看看:
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |