C++20 引入了views::all
which 是一个范围适配器,它返回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_range
withref_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}
良构。
它的目的是什么?有人可以举个例子吗?