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


Rust zeroed用法及代碼示例


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

用法

pub unsafe fn zeroed<T>() -> T

返回由 all-zero byte-pattern 表示的類型 T 的值。

這意味著,例如,(u8, u16) 中的填充字節不一定是零。

無法保證 all-zero byte-pattern 表示某種類型 T 的有效值。例如, all-zero byte-pattern 對於引用類型( &T&mut T )和函數指針來說不是有效值。在此類類型上使用zeroed 會立即導致undefined behavior,因為the Rust compiler assumes 在它認為已初始化的變量中始終存在有效值。

這與 MaybeUninit::zeroed().assume_init() 具有相同的效果。有時它對 FFI 很有用,但通常應避免使用。

例子

該函數的正確用法:用零初始化一個整數。

use std::mem;

let x: i32 = unsafe { mem::zeroed() };
assert_eq!(0, x);

此函數的錯誤用法:用零初始化引用。

use std::mem;

let _x: &i32 = unsafe { mem::zeroed() }; // Undefined behavior!
let _y: fn() = unsafe { mem::zeroed() }; // And again!

相關用法


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