这个问题已经在这里有了答案 :
已经实现了C ++ 17并行算法吗? (4个答案)
2年前关闭。
我在cppreference.com上阅读了std :: algorithm文档,并且注意到了很多我还没有使用过的很棒的东西上的C ++ 17标签。我最关注的是新的执行策略。我从阅读它们中学到的是,仅通过指定执行策略,我就可以使任何想要多线程的循环。for_each
for_each
例如,我有一个程序可以输出带有2D图形的图像。
int main(){ std::for_each( img.buffer().begin(), img.buffer().end(), renderer( {-0.5, 0.0, 2.666, 2.0, M_PI / 2.0, 0.0}, img, 16 ) ); fout << img; }
如果我想使该程序成为多线程,则应该可以用一行完成。
int main(){ std::for_each( std::execution::par_unseq, // c++17 feature img.buffer().begin(), img.buffer().end(), renderer( {-0.5, 0.0, 2.666, 2.0, M_PI / 2.0, 0.0}, img, 16 ) ); fout << img; }
但是,当我第一次尝试(与g++ -std=c++17)时,我遇到了一个错误告诉我‘std::execution’ has not beendeclared,所以我尝试添加#include <execution>但它表示execution: No such file or directory。我也试过了#include<experimental/algorithm>,#include<algorithm>但是得到了相同的结果。如何使用此新功能?
g++ -std=c++17
‘std::execution’ has not beendeclared
#include <execution>
execution: No such file or directory
#include<experimental/algorithm>
#include<algorithm>
c ++ 17尚未完成。并且各种编译器尚未完全实现它。
-std=c++17 表示“将完成的所有C 17给我”,而不是“成为完全有效的C 17编译器”。
-std=c++17
目前,编译器和/或标准库不支持此功能。请在几周/几月/几年后再检查一次。
没有公认的“如果您完全支持C 17,请给我,否则给我一个错误”标志,您可以将其传递给编译器;部分是因为它几乎没有实际用途。如果他们提供的C 17子集足够,您就赢了。而且,如果您需要一个完全兼容的编译器,则特定版本的编译器将不知道它们是否存在错误,因此您无法以任何方式信任该标志,而必须针对编译器版本对其进行测试。并且,如果您已经知道编译器的哪些版本具有足够有效的C ++ 17,则不需要标记来告诉您。