use std::ops::Add;
#[derive(Debug)]
struct Complex { a: f64, b: f64, }
impl Add for Complex {
type Output = Complex;
fn add(self, rhs: Complex) -> Self::Output {
Complex { a: self.a+rhs.a, b: self.b+rhs.b }
}
}
fn main() {
let cp1 = Complex { a: 1f64, b: 2.0 };
let cp2 = Complex { a: 5.0, b: 8.1 };
let cp3 = cp1 + cp2;
println!("{:?}", cp3);
}
add方法的首个参数为什么用self,而不是&self?不解。
1
共 4 条评论, 1 页
评论区
写评论我理解是因为运算符 + 的语义就是 consume,不是 ref。
我的理解:
self
,可以impl<'a, 'b> Add<&'b T> for &'a T
实现非move版本;&self
,没法实现move版本。表达能力变窄了。
我是想为add方法的参数使用self,而不用&self的原因。是想深入了解self各种形态的用法,而你的回答跳过了很多内容。完全不是我想要问的问题。
对以下内容的回复:
https://stackoverflow.com/questions/27856991/operator-overloading-by-value-results-in-use-of-moved-value
这里的回答说你可以对&Complex重载Add,这样就能达到不移动的效果。