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 協議》,轉載必須註明作者和本文連結