rust - 为什么二进制 + 运算符不能与两个 &mut int 一起使用?

标签 rust

fn increment(number: &mut int) {

    // this fails with: binary operation `+` cannot be applied to type `&mut int`
    //let foo = number + number;

    let foo = number.add(number);

    println!("{}", foo);
}

fn main() {
    let mut test = 5;
    increment(&mut test);

    println!("{}", test);
}

为什么 number + number失败但number.add(number)有用吗?

作为奖励问题:上面打印出来

10
5

我认为 test 是否正确?仍然是 5 因为数据被复制 递增?原来的唯一方法test变量可以被 increment 改变如果它作为 Box<int> 发送,函数将是,对吧?

最佳答案

number + number 失败,因为它们是两个引用,而不是两个整数。编译器还告诉我们原因:+ 运算符未针对 &mut int 类型实现。

您必须使用取消引用运算符 * 取消引用才能获得 int。这可行 let sum = *number + *number;

number.add(number); 有效是因为 add 的签名是 fn add(&self, &int) -> int;

Am I right to assume that test is still 5 because the data is copied over to increment? The only way that the original test variable could be mutated by the increment function would be if it was send as Box, right?

Test 没有被复制过来,但仍然是 5,因为它实际上从未发生过变异。如果需要,您可以在增量函数中改变它。

PS: 改变它

fn increment(number: &mut int) {
    *number = *number + *number;
    println!("{}", number);
}

关于rust - 为什么二进制 + 运算符不能与两个 &mut int 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23920968/

相关文章:

rust - 如何防止函数调用被优化掉?

string - 切片包含 Unicode 字符的字符串

rust - 如何解析 cargo 中的 "multiple matching crates for ` 包裹`"?

pointers - 什么是 "fat pointer"?

c# - 如何将结构向量从 Rust 返回到 C#?

rust - if-let 还是普通 if 条件更好?

rust - 基于特征标志的特征实现的条件界限?

rust - 为柴油模型定义结构时出现错误未定义类型或模块

rust - 为什么 `str` 是原始类型?

rust - 从 &str 转换为 OsStr 的正确方法是什么?