c++ - 正在使用强制转换 UB 展平多维数组
问题描述
下面的代码是否定义良好并保证按预期工作?
#include <iostream>
#include <string>
using std::string;
int main() {
string const a[2][2][2] = {
"1", "2", "3", "4", "5", "6", "7", "8",
};
auto constexpr sz = sizeof(a) / sizeof(string);
auto const p = reinterpret_cast<string const*>(&a);
for (std::size_t i = 0; i < sz; ++i) std::cout << p[i] << '\n';
}
据我所知,由于我们将其转换为指针,只要我们访问有效内存,就不会应用越界规则,因此,这是可以的。但我不能确定。
注意:我不是在问数组是否是连续的(它是),我是在问是否将多维数组转换为平面指针,并使用它来访问所有元素是明确定义的(不是 UB)。
解决方案
推荐阅读
- javascript - 如何使用 javascript 启用和禁用按钮
- wordpress - 在 woocommerce 管理员中添加和编辑产品时添加自定义通知
- bit-manipulation - 为什么 (x-1) 从 x 的最右边设置位切换所有位?
- amazon-web-services - 面向初学者的 Echo Dot AWS 技能开发
- javascript - 在fabric js画布中的组中添加文本和网格线
- toolkit - 全息工具包。测试资产在哪里
- c++ - 回答 ay 或 Y、n 或 N 时的奇怪反应
- c - 在 Visual Studio 2017 中编译 C 代码错误 LNK2005 和 LNK1169
- laravel - Laravel Echo '客户端无法通过身份验证,获得 HTTP 状态 405'
- laravel - Laravel - 编译资产,编译依赖