像这样展平数组对于构建原始类型安全吗?
let a = [[0u32;4];4];
let b = std::mem::transmute::<[[u32;4];4], [u32; 16]>(a);
Run Code Online (Sandbox Code Playgroud)
在什么条件下这是安全的?
数组是 Rust 中少数具有保证内存布局的数据结构之一。该数组保证在内存中[T; N]
布置为N
连续的实例。T
因此[[T; M]; N]
可以保证与 具有相同的内存布局[T; M * N]
,并且从一种类型转换为另一种类型对于任何类型都是安全的T
。