Red*_*ave 0 c++ std-ranges c++23
左关联性已由 C++ 核心语义保证:
R|V1|V2被解析为(R|V1)|V2). 如果编码员想要显式地将操作顺序更改为 ,该怎么办R|(V1|V2)?这在 C++23 下可能吗?这个问题背后的原因是它简化了自定义范围适配器的定义:
auto myV=V1|V2|V3;
for(auto& x:R1|myV)/*..*/;
for(auto& x:R2|myV)/*..*/;
Run Code Online (Sandbox Code Playgroud)
所有这些需求似乎都是对 ; 的适当约束过载std::views::operator|;这种超载是否存在?如果没有的话会添加吗?如果不是,其背后的理由是什么?
如果编码员想要显式地将操作顺序更改为 ,该怎么办
R|(V1|V2)?
然后他们就可以这样写。这是一个有效的表达。
范围适配器闭包对象的定义方式有两种等价(这里是范围适配器闭包对象并且C是一个范围):DR
R | C相当于C(R)R | (C | D)相当于R | C | D后者是让您写下您要询问的内容的属性。例如:
auto flat_map = [](auto f){
return views::transform(f) | views::join;
};
vector<int> v = {1, 2, 3};
auto w = v | flat_map([](int i){ return vector<int>(i, i); }
Run Code Online (Sandbox Code Playgroud)
而这里w就变成了范围[1, 2, 2, 3, 3, 3]。
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |