Function core::mem::transmute_copy 1.0.0[−][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