我在cppreference.com上阅读了std :: algorithm文档,并且注意到了很多我还没有使用过的很棒的东西上的C ++ 17标签。我最关注的是新的执行策略。我从阅读它们中学到的是,仅通过指定执行策略,我就可以使任何想要多线程的循环。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;
}
但是,当我第一次尝试(with g++ -std=c++17
)时,我告诉我一个错误‘std::execution’ has not been declared
,所以我尝试添加,#include <execution>
但它说execution: No such file or directory
。我也尝试过#include<experimental/algorithm>
替代,#include<algorithm>
但得到的结果相同。如何使用这项新功能?
c ++ 17尚未完成。并且各种编译器尚未完全实现它。
-std=c++17
表示“将完成的所有C ++ 17都给我”,而不是“成为完全有效的C ++ 17编译器”。
目前,编译器和/或标准库不支持此功能。请在几周/几月/几年后再检查一次。
没有公认的“如果您完全支持C ++ 17,请给我,否则给我一个错误”标志,您可以将其传递给编译器;部分是因为它几乎没有实际用途。如果他们提供的C ++ 17子集足够,您就赢了。而且,如果您需要一个完全兼容的编译器,则特定版本的编译器将不知道它们是否存在错误,因此您无法以任何方式信任该标志,而必须针对编译器版本对其进行测试。而且,如果您已经知道哪个版本的编译器具有足够有效的C ++ 17,则不需要标记即可告诉您。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句