是std :: any_of遵循短路逻辑所需的

Is std::any_of required to follow short circuit logic?

本文关键字:短路 any std of      更新时间:2023-10-16

给定以下代码,

std::vector<int> numbers = {1, 2, 3, 4, 5};
std::any_of(std::begin(numbers), std::end(numbers), 
            [](int number) { return number > 3; } );

STD :: Any_of(按标准)返回4?

标准本身并没有提出任何困难的要求。但是人们可能会间接鼓励它([alg.any_of]):

template <class InputIterator, class Predicate>
  bool any_of(InputIterator first, InputIterator last, Predicate pred);
template <class ExecutionPolicy, class ForwardIterator, class Predicate>
  bool any_of(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last,
              Predicate pred);

返回:false如果[第一个,最后一个)是空的,或者如果没有迭代器i在范围内[第一个,最后一个),以至于pred(*i)是正确的,true 否则。

复杂性:最多最后一个 - 谓词的第一个应用。

虽然一个完美符合的实现可能应用谓词恰好 last-first次,但对我来说,措辞听起来很鼓励尽快退出。

请注意,几乎不可能询问接受ExecutionPolicy的过载相同。从那时起,评估顺序就不知道。

在不太正式的注释中,的任何实现 在谓词是正确的那一刻,都会质疑其作者的凭据。