所有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 span类型,因为似乎构造函数在必须初始化指针或引用时永远无法在编译时求值吗?
取消注释constexprs不会删除它们。
—
安德烈亚斯(Andreas Loanjoe)
您正在初始化运行时跨度,我要初始化一个constexpr跨度
—
Andreas Loanjoe19年
h 不知道为什么我那样做。没关系
—
-NathanOliver
很奇怪,看不出为什么跨度仅存在于本地范围内是为什么……
—
Andreas Loanjoe