本文简要介绍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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。