MaybeUninit::zeroed()

// 著作権 2026 Google LLC
// SPDX-License-Identifier: Apache-2.0

use std::mem::{MaybeUninit, transmute};

fn main() {
    let mut x = [const { MaybeUninit::<u32>::zeroed() }; 10];

    x[6].write(7);

    // SAFETY: `x` のすべての値は書き込み済みである
    let x: [u32; 10] = unsafe { transmute(x) };
    println!("{x:?}")
}

MaybeUninit<T>::zeroed()MaybeUninit<T>::uninit() の代替 コンストラクタです。これは、コンパイラに対して T のビットを ゼロで埋めるよう指示します。」

Q: 「メモリには書き込み済みであるにもかかわらず、型は MaybeUninit<T> のままです。なぜか分かる人はいますか?」

A: 一部の型では、その値が非ゼロまたは非ヌルである必要があります。典型的な例 は参照ですが、これは他の多くの型にも当てはまります。NonZeroUsize 整数型や、その仲間の他の型を考えてみてください。