rust-quiz:013-mutable-zst.rs
题目
struct S;
fn main() {
let [x, y] = &mut [S, S];
let eq = x as *mut S == y as *mut S;
print!("{}", eq as u8);
}
关键
标记类型
struct S标记类型没有结构体,并且值唯一,全局唯一。
尤其,它是zstzstzst不仅是零大小,特殊的一点是:[zst, N]类型也是zst。
其中N都是虚妄,实际取出的结果,都是zst。struct S; fn main() { let a = [S, S]; println!("{}", std::mem::size_of_val(&a)); // 0 }mut
对于任意类型,mut始终只能有一个,就是拥有所有权的那一个。
因此,如果存在多个mut,那么它们一定不是同一个数值,如果不算zst的话。zst类型的数据,因为不存在所谓的修改,仅作为标识。
因此,它们的mut只是一种空操作。
题解
因为S是zst,对于[S, S]取出来的其实都是同一个。
虽然mut修饰了,但是对于zst而言,也是空操作。
因此,两者是相等的。
答案
1
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu