Function std::mem::transmute_copy1.0.0[][src]

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

src 解释为具有 &U 类型,然后在不移动所包含的值的情况下读取 src

通过将 &T 转换为 &U,然后读取 &U,此函数将不安全地假定指针 srcsize_of::<U> 字节有效 (除非这样做的正确方式是,即使 &U 的对齐要求比 &T 严格)。 它还将不安全地创建所包含值的副本,而不是移出 src

如果 TU 具有不同的大小,则不是编译时错误,但是强烈建议仅在 TU 具有相同的大小时调用此函数。如果 U 大于 T,则此函数将触发 未定义的行为

Examples

use std::mem;

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

let foo_array = [10u8];

unsafe {
    // 从 'foo_array' 复制数据并将其视为 'Foo'
    let mut foo_struct: Foo = mem::transmute_copy(&foo_array);
    assert_eq!(foo_struct.bar, 10);

    // 修改复制的数据
    foo_struct.bar = 20;
    assert_eq!(foo_struct.bar, 20);
}

// 'foo_array' 的内容不应更改
assert_eq!(foo_array, [10]);
Run