【发布时间】:2020-04-17 04:17:40
【问题描述】:
我的问题非常具体。 我想禁用隐式取消引用强制(假设是因为我不喜欢它们)。更具体地说,我希望这段代码失败:
fn main() {
let x = Box::new(0);
let mut y = &x;
y = &mut y;
println!("GOT {}",*y);
}
在我看来,这是一个非常荒谬的例子。但是,它编译是因为(我相信)&mut T 强制转换为 T,因此,y = &mut y 语句是一个 nop。
假设这是正确的,我如何防止 Rust 这样做?例如,我尝试使用 #[no_implicit_prelude],但没有任何乐趣。
【问题讨论】:
-
我非常怀疑是否可以禁用,因为它是一项核心语言功能。这有点像询问如何禁用
for循环。 -
您提供的代码没有使用自动解引用。
*y的类型是Box<i32>,Display的格式为Box只是为了打印它的内容。 -
不清楚什么你想在这里禁用或者你为什么认为禁用前奏会起作用。
-
禁用前奏是为了防止包含
Dereftrait。
标签: rust