面试题答案
一键面试// 定义结构体
struct MyNumber {
value: i32,
}
// 实现加法运算符重载
impl std::ops::Add for MyNumber {
type Output = MyNumber;
fn add(self, other: MyNumber) -> MyNumber {
MyNumber { value: self.value + other.value }
}
}
// 实现乘法运算符重载
impl std::ops::Mul for MyNumber {
type Output = MyNumber;
fn mul(self, other: MyNumber) -> MyNumber {
MyNumber { value: self.value * other.value }
}
}
// 定义复杂运算函数
fn complex_operation(a: MyNumber, b: MyNumber) -> MyNumber {
a * b + a
}
在Rust中,自定义类型的运算符优先级和结合性遵循与原生类型相同的规则。乘法 *
运算符优先级高于加法 +
运算符,因此在 a * b + a
这样的表达式中,会先计算 a * b
,然后再将结果与 a
进行加法运算。这是因为Rust的语法设计就是如此,就像原生的 i32
类型在进行类似运算时也遵循这个优先级规则。结合性方面,乘法和加法都是左结合,意味着如果有多个相同优先级的运算符(如 a + b + c
或 a * b * c
),会从左到右依次计算。