为什么通过指向移动变量的指针写入在Rust中没有被确定为UB?
我正在调查阻止 Rust 编译器优化某些代码片段的可能原因。我在 rust-lang 的一个 issue 中发现了这条评论,它提醒了我。
我们不能优化可变借用的局部变量的存储,因为正如@matthewjasper 在 #61430 中指出的那样,并没有决定以下是 UB:
let mut x = String::new(); let p = &mut x as *mut String; let y = x; p.write(String::new());
我认为x当它移动到y. p在.write()通过时晃来晃去。但为什么这不决定为UB?