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 整数型や、その仲間の他の型を考えてみてください。