是否允许相同类型但大小不同的类型双关数组
Is type punning arrays of same type but different size allowed?
相同
类型但大小不同的类型双关数组是否仍然违反严格混叠?
int arr[4];
int(&ref)[2] = reinterpret_cast<int(&)[2]>(arr);
arr[0] = 0; //write to original
ref[0]; //read from pun
我们可以这样争论;[expr.reinterpret.cast]/11:
类型
T1
的glvalue表达式可以转换为类型"引用" 如果可以显式地将"指向T1
的指针"类型的表达式T2
使用reinterpret_cast
转换为类型"指向T2
的指针"。 结果引用与源 glvalue 相同的对象,但具有指定的类型。
[转换阵列]:
类型为"
N T
数组"的左值或右值 [...]可以转换为 "指向T
的指针"类型的 PR值。结果是指向 数组的第一个元素。
也就是说,我们可以说,我们有一个指向(而不仅仅是表示)第一个元素的地址的指针。它是该元素的类型。因此,应定义访问ref[0]
。
按照这个逻辑,写也没问题
auto& ref = reinterpret_cast<unsigned(&)[200]>(arr);
std::cout << ref[0];
相关文章:
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 类型数组?
- 如何在使用 make_unique<T[]>() 制作的模板类型数组上使用 std::fill?
- 将基本类型数组中的内存重新用于不同(但仍然是基本)类型的数组合法吗
- 在C++中返回基元类型数组(Java比较)
- 如何返回 QVariant 类型数组
- 如何在本机 c++ jni 中实现 java 类型数组
- 模板类型数组的模板类型数组
- 如何确定未知类型数组的索引是否为空
- 复杂类型数组的静态初始化
- 访问基类型数组成员(Int-to-type习惯用法)
- 如何将 char 类型数组传递给函数并将第一个字符数组复制到第二个图表数组并使用 c++ 进行比较
- 如何在C 中制作结构类型数组
- 如何创建结构类型数组的地图对象
- C++类类型数组
- C++中的Matlab类型数组
- 节点C++插件 - 当类型数组(Float32Array)作为参数传递时,如何访问它?
- 如何将二维字符类型数组逐行保存到 c 中的.txt文件中
- C++:用户定义的类型数组出错
- 在双精度类型数组中使用 memset()