问题标签 [range-v3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
365 浏览

c++ - 将迭代器解引用到临时范围时出现非指针操作数错误

使用

我们做得到:

我们也可以这样做:

不幸的是,当我尝试将上面的版本缩短为:

我收到一个错误:

我以为是因为那个无限的范围,但我错了。

这会产生相同的错误。

为什么我不能在ranges::find_if将范围作为右值时取消引用?

是否ranges::getlines返回范围?如果是这样,范围应该拥有东西吗?

godbolt.org/g/Yo6tKa

0 投票
1 回答
290 浏览

c++ - 是否有一个特征或任何约定来检查一个范围或一个“view_facade”是否拥有东西?(例如getlines)

给定

ranges::getlines对于返回一个拥有 view_facade其正面迭代器的缓冲区的事实。

所以我们有义务在传递给算法之前将这种范围设为左值。

还有一个很酷的保护机制可以防止迭代器的所有取消引用在时间已经被破坏的数据,并使那些尝试编译时错误。

因此,当所有权作为rvalueview_facade传递给算法时,保护会在取消引用时进行。

这不会编译。

错误为:

这也不会编译。

错误为:

godbolt.org/g/gF6nYx


我的问题是,除了文档之外,是否有任何特征或任何类型的范围约定来检查范围类型是否拥有

也许,像constexpr bool is_owning_v(Rng&&)

0 投票
1 回答
356 浏览

c++ - view::c_str 是否与 view::split 有问题?

给定

我们有一组适配器只是为了分割单词然后尝试将它们显示为格式化范围。

如果 source 是 string_view,那没关系。

输出:[魔杖盒]

然后尝试使用 view::c_str

错误:[CE]


这是 view::c_str 的某种限制,还是 view::c_str 和 view::split 之间存在一些问题?

godbolt.org/g/bTK4Yp

wandbox.org/permlink/ZkDmSkBxPg80oebS

0 投票
1 回答
726 浏览

c++ - rangev3 ts 中的“范围”和“视图”有什么区别?

rangev3 ts 中的“范围”和“视图”有什么区别?

在 G 搜索中找不到任何类似的答案。猜猜我正在努力了解每个人应该做什么的基本概述:

范围'is-a'视图是否是这种情况(在c ++中),反之亦然?

仅仅是视图是只读范围吗?或者,范围中的“元素”(当您取消引用迭代器时得到的)在一个中是 const 而不是另一个?

谢谢!

0 投票
1 回答
239 浏览

c++ - 为什么将 `const char[N]` 和 `const char*` 传递给 view::c_str() 会产生不同的二进制文件,而 string_view 会产生相同的二进制文件?

With std::string_view,range::for_each产生与两者的精确组装const char[N]const char *传递给std::string_viewctor

换句话说,这段代码

两者都低于装配:

此外,如果我们将 ac 字符串传递const char[N]ranges::view::c_str()

这会产生上面的精确装配,就像一个std::string_view生产一样。


另一方面,如果我们传递 acconst char*字符串ranges::view::c_str()

这次它产生了一个不同的程序集,如下所示:


哪个大会获胜?

为什么std::string_view决定产生相同的二进制文件?

只能用和view::c_str()产生一个更快的组装吗?const char*const char [N]

godbolt.org/g/wcQyY1

0 投票
1 回答
195 浏览

c++ - 我们不能在 view::chunk 之前懒惰地做 view::filter 吗?

这不会编译:

错误:

godbolt.org/g/PhcdGc


我想知道这种行为背后的概念是什么?

如果这不满足这样的概念为什么没有警报出现?

0 投票
0 回答
80 浏览

c++ - 为什么添加 view::filter 会触发多个冗余的哨兵检查?

给定str的是一个字符串

我注意到当我们view::filter在惰性范围内存在时,即使使用 -O3,也会有许多冗余的哨兵检查。CE godbolt.org/g/B3ZGbm

但是,如果我尝试像这样将该过滤器嵌入到变换中

多余的哨兵检查都没有了。CE godbolt.org/g/4sMYhM


为什么优化器在存在时不能摆脱那些冗余检查view::filter

这是否被认为是微不足道的开销view::filter


更新

std::string_view(nullptr)按照凯西在评论中的指示更改std::string_view()为坏。

-DNDEBUG按照凯西在评论中的指示添加后。循环结束检查现在消失了。在进入转换之前还有额外的检查。CE godbolt.org/g/YWUPaK

有了-DNDEBUG,它的产量要好得多,但似乎还有一个多余的挥之不去。


更新 2

我尝试添加另一个变换。似乎在它本身之后只有一组冗余检查view::filter。CE godbolt.org/g/sSt8qb

0 投票
1 回答
280 浏览

c++ - 容器在概念上肯定是一个范围吗?

range-v3的文档中:

view::all

返回包含源中所有元素的范围。用于将容器转换为范围。

让我感到困惑的是:

  1. 在什么场景下view::all使用?
  2. 标准容器(std::vector,std::list等)在概念上不是范围吗?

例如:

version 1和有什么区别version 2吗?

0 投票
1 回答
196 浏览

c++ - 为什么 range::accumulate 在调用时不将 init 作为 std::move(init) 传递?

截至 2018 年 3 月 17 日的 d5e9afc 提交,accumulate.hpp

当传递一个范围时,init 会std::move像这样得到一次。

然后上面的代码将调用它:

我想知道为什么在调用调用之前我们需要另一个 init 副本?

这个初始化必须以任何方式覆盖,对吧?那么,为什么一开始就撕掉它是不好的呢?

0 投票
1 回答
57 浏览

c++ - 为什么按值捕获 std::istringstream 右值的 Op 无法满足 Accumulateable 概念?

这不会编译:

错误为:

godbolt.org/g/3zjkLv


然而,通过引用捕获是没问题的。

godbolt.org/g/SbpH61


为什么按值捕获右值会使这个概念std::istringstream失败?Accumulateable