问题标签 [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.
c++ - 将迭代器解引用到临时范围时出现非指针操作数错误
使用
我们做得到:
我们也可以这样做:
不幸的是,当我尝试将上面的版本缩短为:
我收到一个错误:
我以为是因为那个无限的范围,但我错了。
这会产生相同的错误。
为什么我不能在ranges::find_if
将范围作为右值时取消引用?
是否ranges::getlines
返回范围?如果是这样,范围应该拥有东西吗?
c++ - 是否有一个特征或任何约定来检查一个范围或一个“view_facade”是否拥有东西?(例如getlines)
给定
ranges::getlines
对于返回一个拥有 view_facade
其正面迭代器的缓冲区的事实。
所以我们有义务在传递给算法之前将这种范围设为左值。
还有一个很酷的保护机制可以防止迭代器的所有取消引用在时间已经被破坏的数据,并使那些尝试编译时错误。
因此,当所有权作为rvalueview_facade
传递给算法时,保护会在取消引用时进行。
这不会编译。
错误为:
这也不会编译。
错误为:
我的问题是,除了文档之外,是否有任何特征或任何类型的范围约定来检查范围类型是否拥有?
也许,像constexpr bool is_owning_v(Rng&&)
c++ - view::c_str 是否与 view::split 有问题?
c++ - rangev3 ts 中的“范围”和“视图”有什么区别?
rangev3 ts 中的“范围”和“视图”有什么区别?
在 G 搜索中找不到任何类似的答案。猜猜我正在努力了解每个人应该做什么的基本概述:
范围'is-a'视图是否是这种情况(在c ++中),反之亦然?
仅仅是视图是只读范围吗?或者,范围中的“元素”(当您取消引用迭代器时得到的)在一个中是 const 而不是另一个?
谢谢!
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_view
ctor
换句话说,这段代码
和
两者都低于装配:
此外,如果我们将 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]
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
c++ - 容器在概念上肯定是一个范围吗?
从range-v3的文档中:
view::all
返回包含源中所有元素的范围。用于将容器转换为范围。
让我感到困惑的是:
- 在什么场景下
view::all
使用? - 标准容器(
std::vector
,std::list
等)在概念上不是范围吗?
例如:
version 1
和有什么区别version 2
吗?
c++ - 为什么 range::accumulate 在调用时不将 init 作为 std::move(init) 传递?
截至 2018 年 3 月 17 日的 d5e9afc 提交,accumulate.hpp
当传递一个范围时,init 会std::move
像这样得到一次。
然后上面的代码将调用它:
我想知道为什么在调用调用之前我们需要另一个 init 副本?
这个初始化必须以任何方式覆盖,对吧?那么,为什么一开始就撕掉它是不好的呢?
c++ - 为什么按值捕获 std::istringstream 右值的 Op 无法满足 Accumulateable 概念?
这不会编译:
错误为:
然而,通过引用捕获是没问题的。
为什么按值捕获右值会使这个概念std::istringstream
失败?Accumulateable