當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust MaybeUninit.zeroed用法及代碼示例


本文簡要介紹rust語言中 std::mem::MaybeUninit.zeroed 的用法。

用法

pub fn zeroed() -> MaybeUninit<T>

在未初始化狀態下創建一個新的 MaybeUninit<T>,內存被 0 字節填充。這取決於T 是否已經進行了正確的初始化。例如,MaybeUninit<usize>::zeroed() 已初始化,但 MaybeUninit<&'static i32>::zeroed() 未初始化,因為引用不能為空。

請注意,刪除 MaybeUninit<T> 永遠不會調用 T 的刪除代碼。您有責任確保 T 在初始化後被丟棄。

示例

該函數的正確用法:用零初始化一個結構體,該結構體的所有字段都可以將bit-pattern 0作為有效值。

use std::mem::MaybeUninit;

let x = MaybeUninit::<(u8, bool)>::zeroed();
let x = unsafe { x.assume_init() };
assert_eq!(x, (0, false));

不正確該函數的用法:調用x.zeroed().assume_init()0不是以下類型的有效 bit-pattern:

use std::mem::MaybeUninit;

enum NotZero { One = 1, Two = 2 }

let x = MaybeUninit::<(u8, NotZero)>::zeroed();
let x = unsafe { x.assume_init() };
// Inside a pair, we create a `NotZero` that does not have a valid discriminant.
// This is undefined behavior. ⚠️

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::mem::MaybeUninit.zeroed。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。