gpt4 book ai didi

c++ - std::any_of 与顺序执行策略一起使用时是否保证迭代顺序?

转载 作者:可可西里 更新时间:2023-11-01 18:27:01 31 4
gpt4 key购买 nike

我有一个过滤函数列表。如果这些函数中的任何一个返回“true”,我就不应该进一步处理事件。

std::any_of 似乎适合这个用例,但我希望保证过滤器函数按照它们添加到我的列表中的顺序被调用(因为它们可能有副作用)。因此,如果我使用 std::any_of,我需要知道它调用过滤器函数的顺序是确定的,从列表的 begin() 到 end()。

我检查了 std::any_of 上的 C++ 标准和顺序执行策略,但没有提到顺序保证。我没有在 cppreference 上找到关于订单保证的提及,也没有在 stackoverflow 上找到足够相似的已回答问题。

我的结论是没有订单保证。虽然大多数编译器可能会按我的顺序处理函数,但我不应该依赖它。

bool MyClass::event(QEvent* event)
{
std::vector<std::function<bool(QEvent*)> > functionList = getCurrentEventFilters();

const auto bFilter = std::any_of(functionList .begin(),
functionList .end(),
[&event](std::function<bool(QEvent*)> function) {return function(event);});
if (bFilter)
{
return true;
}

return Base::event(event);
}

最佳答案

关于 std::execution::sequenced_policy :

The invocations of element access functions in parallel algorithms invoked with this policy (usually specified as std::execution::seq) are indeterminately sequenced in the calling thread.

关于 indeterminately-sequenced :

evaluations of A and B are indeterminately sequenced: they may be performed in any order but may not overlap: either A will be complete before B, or B will be complete before A.

对我来说,这似乎是一个明确的声明,即你不能依赖事物的顺序。
没想到这个。。

原则上,这对您来说应该无关紧要。在有副作用的东西上调用 std::any_ofstd::all_of 似乎很可疑。

关于c++ - std::any_of 与顺序执行策略一起使用时是否保证迭代顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57588668/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com