Quu*_*one 5 c++ stl standard-library c++20 c++26
我知道至少大多数Ranges 视图类型不需要任何堆分配。例如,您可以在堆栈上获取一个 C 数组并通过管道将其通过,std::views::take(42)而不会导致任何堆分配。
但我知道有很多模糊的视图适配器,例如,,,views::join每年都会有更多的视图适配器出现,仅仅因为今天大多数视图适配器显然不分配(在常见情况下)并不意味着所有视图适配器永远不会分配。views::istreamviews::chunk_by
通过类比:我知道大多数标准库算法不需要任何堆分配。例如,您可以在堆栈上获取一个 C 数组,并且std::ranges::partition不会引起任何堆分配。但有一些算法(std::inplace_merge、std::stable_sort、std::stable_partition;及其std::ranges对应算法)确实执行运行时堆分配。我们已经有一个 SO 问题跟踪哪些算法堆分配。
因此,我要求一个最新的答案(甚至可能在将来维护/更新):在任何主要 STL 供应商的实现上,是否有任何std::views::适配器需要堆分配?如果有,是哪些以及为什么?
当前标准库中或预计为 C++26 建议的视图(请参阅 P2760)不需要自行分配内存。
generator当然可以分配给协程机制(仅展示unique_ptr<stack<coroutine_handle<>>>成员不会出现在任何高质量的实现中)single_view<vector<string>>.any_view- 如果要提议的话 - 会的。