Function std::mem::transmute_copy
1.0.0 (const: unstable) · source · pub unsafe fn transmute_copy<Src, Dst>(src: &Src) -> Dst
Expand description
将 src
解释为具有 &Dst
类型,然后读取 src
而不移动包含的值。
这个函数将不安全地假设指针 src
通过将 &Src
转换为 &Dst
然后读取 &Dst
对 size_of::<Dst>
字节有效 (除了即使 &Dst
具有比 &Src
更严格的对齐要求也是正确的方式)。
它还将不安全地创建所包含值的副本,而不是移出 src
。
如果 Src
和 Dst
具有不同的大小,这不是编译时错误,但强烈建议仅在 Src
和 Dst
具有相同大小的情况下调用此函数。如果 Dst
大于 Src
,这个函数会触发 undefined behavior。
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