我创建了一个由两个元素组成的
我让所有的函数和方法都采用引用而不是值,同时希望
根据我尝试的不同变体,我要么遇到终身问题,要么遇到类型不匹配。具体来说,`&self`参数似乎没有被视为正确的类型。
我看到了一些在`impl`和`Add`上使用模板参数的示例,但它们只会导致不同的错误。
我发现如何为不同的RHS类型和返回值重载运算符?但是即使我在顶部放置了
我正在使用rustc 1.0.0-nightly(ed530d7a3 2015-01-16 22:41:16 +0000)
我不会接受“你只有两个字段,为什么使用引用”作为答案;如果我想要一个100个元素的结构体呢?如果情况确实如此(我不认为是这样),我将接受证明即使有一个大结构体,我应该通过值传递的答案。我对于结构体大小和按值传递与结构体的良好经验法则感兴趣,但这不是当前的问题。
Vector
结构体,并且想要重载+
运算符。我让所有的函数和方法都采用引用而不是值,同时希望
+
运算符也能以同样的方式工作。impl Add for Vector {
fn add(&self, other: &Vector) -> Vector {
Vector {
x: self.x + other.x,
y: self.y + other.y,
}
}
}
根据我尝试的不同变体,我要么遇到终身问题,要么遇到类型不匹配。具体来说,`&self`参数似乎没有被视为正确的类型。
我看到了一些在`impl`和`Add`上使用模板参数的示例,但它们只会导致不同的错误。
我发现如何为不同的RHS类型和返回值重载运算符?但是即使我在顶部放置了
use std :: ops :: Mul;
,答案中的代码也无效。我正在使用rustc 1.0.0-nightly(ed530d7a3 2015-01-16 22:41:16 +0000)
我不会接受“你只有两个字段,为什么使用引用”作为答案;如果我想要一个100个元素的结构体呢?如果情况确实如此(我不认为是这样),我将接受证明即使有一个大结构体,我应该通过值传递的答案。我对于结构体大小和按值传递与结构体的良好经验法则感兴趣,但这不是当前的问题。
(%struct.Big* sret, %struct.Big*, %struct.Big*)
。我不自称是LLVM专家,但这看起来像是它自动通过引用进行接收和返回。 - Shepmaster%arg7 = alloca %struct.Big, align 8
and%arg8 = alloca %struct.Big, align 8
),因此至少对于大型结构体而言,引用更好。 - Jeremy Sorensenlet c = (&a) + (&b);
会非常麻烦。 - Jeremy Sorensen