C++20 引入了views::allwhich 是一个范围适配器,它返回view包含其范围参数的所有元素的 a。
该表达式views::all(E)与以下表达式等效(具有相同的效果):
decay-copy(E)如果是腐烂类型的E模型view。- 否则,
ref_view{E}如果该表达式是格式良好的 - 否则,
subrange{E}
第一种情况表示 a的类型在使用(goldbotview )管道后没有改变:views::all
auto r = views::iota(0);
static_assert(std::same_as<decltype(r), decltype(r | views::all)>);
第二种情况用于包装viewable_rangewithref_view以方便范围管道操作:
int r[] = {0, 1, 2};
static_assert(std::same_as<ranges::ref_view<int[3]>, decltype(r | views::all)>);
但是关于第三种情况,我想不出在什么情况下subrange{E}是良构和ref_view{E}良构。
它的目的是什么?有人可以举个例子吗?