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