我们在 GCC 9 中有 C 20 范围库吗?

新手上路,请多包涵

我们是否支持新发布的 GCC 9 中的 C++20 范围库?

我从以下位置复制了范围库的示例代码: https ://en.cppreference.com/w/cpp/ranges

 #include <vector>
#include <ranges>
#include <iostream>

int main()
{
  std::vector<int> ints{0,1,2,3,4,5};
  auto even = [](int i){ return 0 == i % 2; };
  auto square = [](int i) { return i * i; };

  for (int i : ints | std::view::filter(even) | std::view::transform(square)) {
    std::cout << i << ' ';
  }
}

但是当使用 g++ 9.1 (Ubuntu 18.04 LTS (Bionic Beaver)) 编译时,它抱怨 <ranges> 找不到:

 $ g++ -std=c++2a cpp2a.cpp
cpp2a.cpp:2:10: fatal error: ranges: No such file or directory
    2 | #include <ranges>
      |          ^~~~~~~~
compilation terminated.

我错过了什么吗?

范围库会在某个时间点与 GCC 9 系列一起出现吗?

原文由 thor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 708
1 个回答

我错过了什么吗?

不。

范围库会在某个时间点与 gcc-9 系列一起出现吗?

这是可能的,但似乎不太可能。这没有发生。在 gcc 中支持 Ranges 的第一个版本是 gcc 10.1。


Ranges 是一个 巨大的 图书馆。现在还是 2019 年,官方的 C++20 标准还要再过一年半才能发布。它需要一段时间才能在主要的标准库实现中实现。我们只需要等待。

如果您想开始使用 Ranges,您可以使用 Range-v3 (特别是 v1.0-beta 分支),或者您可以在 cmcstl2 找到 C++20 Ranges 的实现(这是 Casey Mysterious Carter 的实现)。

您还可以定期检查 cppreference 的 编译器/库跟踪页面(在撰写本文时,该页面显示没有库实现了 One Ranges 提案,但确实显示了许多 C++20 功能已由各个库供应商实现) .

原文由 Barry 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题