今天回答问题“ Range based for loop for heap allocated arrays ”时,我偶然发现了使用reinterpret_cast
使用{{3}从指针类型转换为数组类型的建议}(经过讨论后,我们决定发布一个新问题,因为我们无法找到结论。)。强制转换如下进行(例如,为了能够使用基于范围的循环对数组进行迭代):
int* ptr = new int[3];
auto arr_ptr = std::launder(reinterpret_cast<int (*)[3]>(ptr));
我几乎可以确定这是UB,但我不确定。 有足够的C ++专家来回答这个问题吗?
我认为这可以归结为一个问题:reinterpret_cast
在从ptr-type转换为array-type(我认为是UB)时是否有效,与我是否使用{{1} }。