pub unsafe fn zeroed<T>() -> T
Expand description
返回由全零字节模式表示的 T
类型的值。
这意味着,例如,(u8, u16)
中的填充字节不必为零。
不能保证全零字节模式代表某种 T
类型的有效值。
例如,对于引用类型 (&T
,&mut T
) 和函数指针,全零字节模式不是有效值。
在此类类型上使用 zeroed
会立即导致 未定义的行为,因为 Rust 编译器 假设在它认为已初始化的变量中始终存在有效值。
与 MaybeUninit::zeroed().assume_init()
具有相同的作用。
有时对 FFI 很有用,但通常应避免使用。
Examples
此函数的正确用法:用零初始化一个整数。
use std::mem;
let x: i32 = unsafe { mem::zeroed() };
assert_eq!(0, x);
Run该函数的 错误 用法:用零初始化引用。
use std::mem;
let _x: &i32 = unsafe { mem::zeroed() }; // 未定义的行为!
let _y: fn() = unsafe { mem::zeroed() }; // 然后再一次!
Run