我正在阅读C++17 in detail。 在本书的下面,有 std :: for_each 的描述:
在for_each的串行版本中,C ++ 17之前可用的版本>您获得一元 作为算法的返回值。 在并行版本中,返回这样的对象是不可能的,因为>调用的顺序是不确定的。
我仍然理解,为什么并行 std :: for_each 无法返回函子 f 。尽管调用顺序不确定,但并行 for_each 块等待调用完成。每次并行操作完成后,返回 f 似乎没问题。
答案 0 :(得分:6)
返回函子的想法是允许函子在连续的调用中累积状态。可以通过返回的副本访问累积状态。
累加需要对累加状态的串行访问,这将破坏并行执行的目的。本质上,每个执行线程都将获得功能对象的副本,并且它们的状态不会共享。
该标准有以下注释:
[注意:不返回其Function参数的副本,因为并行化可能不允许高效 状态积累。 —尾注]