Function std::mem::zeroed

1.0.0 · source ·
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