【发布时间】:2020-03-16 15:07:00
【问题描述】:
std::span 的所有构造函数都声明为 constexpr,但是我似乎无法让它们中的任何一个在 constexpr 上下文中工作。取消注释下面的任何 constexpr 都会导致编译错误。
#include <array>
#include <span>
int main()
{
constexpr int carray[3] = { 0, 1, 2 };
constexpr std::array<int, 3> array{ 0, 1, 2 };
using S = std::span<const int, 3>;
/*constexpr*/ S span1{ array.data(), 3 };
/*constexpr*/ S span2{array.begin(), array.end()};
/*constexpr*/ S span3{carray};
/*constexpr*/ S span4{array};
}
实际上是否有可能创建一个 constexpr 跨度类型,因为当构造函数必须初始化指针或引用时,它们似乎永远无法在编译时进行评估?
【问题讨论】:
-
取消注释 constexprs 不要删除它们。
-
您正在初始化一个运行时跨度,我的意思是初始化一个 constexpr 跨度
-
多哈。不知道我为什么这样做。没关系
-
奇怪,不明白为什么有必要跨度只存在于本地范围内......