本文簡要介紹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 MaybeUninit.assume_init_mut用法及代碼示例
- Rust MaybeUninit.as_ptr用法及代碼示例
- Rust MaybeUninit.write_slice用法及代碼示例
- Rust MaybeUninit.assume_init_ref用法及代碼示例
- Rust MaybeUninit.write_slice_cloned用法及代碼示例
- Rust MaybeUninit.assume_init用法及代碼示例
- Rust MaybeUninit.write用法及代碼示例
- Rust MaybeUninit.as_mut_ptr用法及代碼示例
- Rust MaybeUninit.array_assume_init用法及代碼示例
- Rust MaybeUninit.uninit用法及代碼示例
- Rust MaybeUninit.new用法及代碼示例
- Rust MaybeUninit.uninit_array用法及代碼示例
- Rust MaybeUninit.assume_init_read用法及代碼示例
- Rust MaybeUninit用法及代碼示例
- Rust ManuallyDrop用法及代碼示例
- Rust ManuallyDrop.into_inner用法及代碼示例
- Rust ManuallyDrop.new用法及代碼示例
- Rust Map用法及代碼示例
- Rust Mutex.new用法及代碼示例
- Rust MetadataExt.st_ctime_nsec用法及代碼示例
- Rust MetadataExt.mtime_nsec用法及代碼示例
- Rust MetadataExt.nlink用法及代碼示例
- Rust MulAssign.mul_assign用法及代碼示例
- Rust Mutex.get_mut用法及代碼示例
- Rust MetadataExt.st_atime用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::mem::MaybeUninit.zeroed。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。