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