【发布时间】:2021-01-05 04:10:37
【问题描述】:
我想将array<double*> 转换为vector<double>,以便我可以对两个相同类型的向量执行ranges::views::concat,但我很难做到这一点。
我有以下代码:
#include <range/v3/all.hpp>
#include <array>
static constexpr auto max_elements = 2000;
struct PriceInfo
{
std::array<double*, max_elements> prices;
};
auto main() -> int
{
const PriceInfo* const buf_prices = nullptr;
const auto vec = buf_prices->prices
| ranges::views::indirect
| ranges::to_vector;
}
当我编译时出现以下错误,我不明白为什么,因为我相信我的代码是正确的,至少它在 gcc 下编译没有错误。
请问我该如何解决这个错误?
【问题讨论】:
-
首先,您在此处取消引用
nullptr(buf_prices)。这是 UB。 -
nullptr 作为地点标记和测试存在。假设一个正确格式的指针数组。
-
这里是神螺栓游戏区:godbolt.org/z/MezYh1
-
这是另一个正确的数组初始化:godbolt.org/z/3G1oTT
-
@Andrew 它仍然是 ub...您取消引用非易失性 nullptr 并写入不存在的对象。编译器允许跳过或做任何事情