【发布时间】:2021-12-26 21:35:28
【问题描述】:
当我看到这段代码时,一切都清楚了。我们有一个引用,我们应该取消引用以操作和读取其中的数据。
fn twice(x: &mut u8) {
*x = *x * 2;
}
但是为什么下面的代码会编译呢?
fn twice(x: &u8) -> u8 {
x * 2
}
为什么 Rust 不要求我在此处取消引用 x 并在第一个示例中要求它?
【问题讨论】:
标签: rust
当我看到这段代码时,一切都清楚了。我们有一个引用,我们应该取消引用以操作和读取其中的数据。
fn twice(x: &mut u8) {
*x = *x * 2;
}
但是为什么下面的代码会编译呢?
fn twice(x: &u8) -> u8 {
x * 2
}
为什么 Rust 不要求我在此处取消引用 x 并在第一个示例中要求它?
【问题讨论】:
标签: rust
Rust 有一个Mul<u8> implementation for &u8。这意味着您可以将&u8 和u8 相乘得到u8,而无需取消引用。但是,无论出于何种原因,&mut u8 没有实例,因此以下操作将失败:
fn twice(x: &mut u8) -> u8 {
x * 2
}
【讨论】: