如何使用std::bit_cast直接转换为原生数组(无需辅助结构)
关于std::bit_cast转换为原生数组的问题
首先明确:无法直接用std::bit_cast返回原生数组类型,因为C++不允许函数返回数组,而std::bit_cast的返回值类型就是模板参数指定的To类型,所以直接写std::bit_cast<short[200]>(in)会报错——编译器无法生成返回数组的函数实例。
但你可以通过数组引用作为目标类型,实现不借助额外结构体、std::array或memcpy的转换,代码如下:
#include <bit> struct A { int a[100]; }; void test(const A &in) { // 使用数组引用作为std::bit_cast的目标类型 const auto& x = std::bit_cast<const short(&)[200]>(in); // 可以像原生数组一样使用x short first_element = x[0]; }
原理说明
std::bit_cast允许目标类型为数组引用,因为函数可以返回引用类型,这符合C++语法规则。- 这里
const short(&)[200]是指向200个short元素的数组的const引用,转换后x会直接绑定到原对象内存的重解释视图,没有额外拷贝。 - 前提是源类型和目标类型的内存大小必须完全一致:
A的大小是100 * sizeof(int) = 400字节,short[200]的大小是200 * sizeof(short) = 400字节,满足std::bit_cast的要求;同时两者都是可平凡复制类型,符合标准对std::bit_cast的类型约束。
内容的提问来源于stack exchange,提问作者Home of the Brave
相关产品推荐
相关产品推荐

