Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

MaybeUninit::zeroed()

// Copyright 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::zeroed() — альтернативный конструктор для MaybeUninit::uninit(). Он указывает компилятору заполнить биты T нулями».

Вопрос: «Хотя память была записана, тип остаётся MaybeUninit<T>. Может ли кто-нибудь предположить почему?»

Ответ: значения некоторых типов не могут быть нулевыми (null). Классический случай — ссылки, но это относится и ко многим другим типам. Вспомните целочисленный тип NonZeroUsize и другие типы этого семейства.