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


Rust transmute_copy用法及代碼示例


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

用法

pub unsafe fn transmute_copy<T, U>(src: &T) -> U

src 解釋為具有類型 &U ,然後讀取 src 而不移動包含的值。

此函數將不安全地假設指針 src 通過將 &T 轉換為 &U 然後讀取 &U size_of::<U> 字節有效(除非這樣做的方式是正確的,即使在 &U&T 更嚴格的對齊要求)。它還會不安全地創建包含值的副本,而不是移出 src

如果 TU 具有不同的大小,這不是編譯時錯誤,但強烈建議僅在 TU 具有相同大小的情況下調用此函數。如果 U 大於 T ,則此函數觸發 undefined behavior

例子

use std::mem;

#[repr(packed)]
struct Foo {
    bar: u8,
}

let foo_array = [10u8];

unsafe {
    // Copy the data from 'foo_array' and treat it as a 'Foo'
    let mut foo_struct: Foo = mem::transmute_copy(&foo_array);
    assert_eq!(foo_struct.bar, 10);

    // Modify the copied data
    foo_struct.bar = 20;
    assert_eq!(foo_struct.bar, 20);
}

// The contents of 'foo_array' should not have changed
assert_eq!(foo_array, [10]);

相關用法


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