我们在新发布的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(仿生海狸))进行编译时,它抱怨找不到<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系列中,范围库会在某个时间到达吗?
答案 0 :(得分:15)
我想念什么吗?
否。
gcc-9系列的范围库会在某个时间到达吗?
可能,但似乎不太可能。
范围是一个巨大的库。仍然是2019年,官方的C ++ 20标准甚至还要再过一年半才会发布。它需要一段时间才能在主要的标准库实现中实现。我们只需要等待。
如果您想开始使用Ranges,可以使用Range-v3(特别是library(rvest)
base <- "https://coinatmradar.com/city/345/bitcoin-atm-birmingham-uk/"
base_read <- read_html(base)
atm_urls <- html_nodes(base_read, ".place > a")
all_urls_final <- html_attr(atm_urls, "href" )
print(all_urls_final)
分支),也可以在cmcstl2找到C ++ 20 Ranges的实现(这是Casey Mysterious Carter的实现)。
您还可以定期检查cppreference的compiler/library tracking page(毫不奇怪,当前没有任何库实现了One Ranges提案,但是确实显示了许多库供应商已经实现的许多C ++ 20功能)
答案 1 :(得分:9)
答案 2 :(得分:8)
g ++ 10支持<ranges>
功能和number of other c++20 features。
#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::views::filter(even) | std::views::transform(square)) {
std::cout << i << ' ';
}
}
$ g++-10 -Wall -Wextra -std=c++20 ranges.cpp
$ ./a.out
0 4 16
在Ubuntu上,这些软件包现已可用。要安装:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt install gcc-10 g++-10
但是,g ++-10不支持 all 所有功能。有关受支持的功能列表,请参见Table 1.8. C++ 2020 Library Features。
答案 3 :(得分:3)
GCC 10已于3月稳定发布(带有version update 10.1 on May 7, 2020)。
此版本支持ranges
。
compiler/library tracking page也是最新的。
因此您的代码示例*会编译:https://godbolt.org/z/MPxBMs
#include <vector>
#include <ranges>
#include <iostream>
int main()
{
std::vector<int> ints{0,1,2,3,4,5,6};
auto even = [](int i){ return 0 == i % 2; };
auto square = [](int i) { return i * i; };
for (int i : ints | std::views::filter(even) | std::views::transform(square)) {
std::cout << i << ' ';
}
}
*:由于名称空间别名是std::views
而不是std::view
,因此有一个小的修正。
我通过在macOS上手动编译 的本地安装进行了测试。
g++-10.1 -std=c++20 -Wall test.cpp