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
标记类型没有结构体,并且值唯一,全局唯一。
尤其,它是zst
zst
zst
不仅是零大小,特殊的一点是:[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 协议》,转载必须注明作者和本文链接
推荐文章: