【发布时间】:2021-01-04 02:18:06
【问题描述】:
我有一个const z* zs = nullptr;
我想将zs 转换为std::span
当我尝试执行 std::span<const z>(zs) 时,我收到一条错误消息
错误:没有匹配函数调用'std::span::span(const z* const&)'
如何将zs转换成std::span
我试过std::span<const z>(zs[0]) 它似乎可以编译。这样对吗?
【问题讨论】:
-
您希望
span超过nullptr的行为如何?这似乎被设计破坏了。 -
取消引用空指针(这是您尝试执行的操作
*(zs + 0),其中zs = nullptr)是未定义的行为。这就是编译器没有错误的原因。 -
错误信息很简单:你不能仅仅给定一个指针值来构造一个跨度。如果它指向一个有效元素而不是
nullptr,这并不重要——问题是跨度必须知道要跨越多少个元素。根据设计,指针不存储任何此类信息。问题是,为什么您要进行这种转换?如果您只是想拥有一个零长度的跨度,那么首先没有理由设置指针。