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只是一种空操作。

题解

因为Szst,对于[S, S]取出来的其实都是同一个。
虽然mut修饰了,但是对于zst而言,也是空操作。
因此,两者是相等的。

答案

1

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!