【发布时间】:2021-07-31 15:17:29
【问题描述】:
C++20 引入了views::all,它是一个范围适配器,它返回一个包含其范围参数的所有元素的view。
表达式views::all(E) 与以下表达式等效(具有相同的效果):
-
decay-copy(E)如果E的衰减类型模型view。 - 否则,
ref_view{E}如果该表达式格式正确 - 否则,
subrange{E}
第一种情况表示view 的类型在使用views::all (goldbot) 进行管道传输后没有改变:
auto r = views::iota(0);
static_assert(std::same_as<decltype(r), decltype(r | views::all)>);
第二种情况是用ref_view包裹一个viewable_range,方便范围管道操作:
int r[] = {0, 1, 2};
static_assert(std::same_as<ranges::ref_view<int[3]>, decltype(r | views::all)>);
但是关于第三种情况,我想不出在什么情况下subrange{E} 是良构的,ref_view{E} 是良构的。
它的目的是什么?谁能举个例子?
【问题讨论】:
标签: c++ c++20 range-v3 std-ranges