c++ - ¿Se requiere std:: any_of para seguir la lógica de cortocircuito?
c++11 stl (1)
La norma en sí no impone ningún requisito tan duro. Pero uno puede inferir que se alienta indirectamente ( [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);
Devuelve : falso si [primero, último) está vacío o si no hay un iterador i en el rango [primero, último), de modo que pred (* i) es verdadero, y en caso contrario, es verdadero.
Complejidad : a lo sumo, primeras aplicaciones del predicado.
Si bien una implementación que se adapta perfectamente puede aplicar el predicado exactamente las last-first
veces, la redacción para mí suena como si fuera a animarse a salir tan pronto como sea posible.
Tenga en cuenta que es prácticamente imposible pedir lo mismo de la sobrecarga que acepta una ExecutionPolicy
. Desde entonces se desconoce el orden de evaluación.
En una nota menos formal, cualquier implementación de la versión secuencial que no sale en el momento en que el predicado es verdadero, pone en duda las credenciales de su autor.
Dado el siguiente código,
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::any_of(std::begin(numbers), std::end(numbers),
[](int number) { return number > 3; } );
es std :: any_of requerido (según la norma) para regresar tan pronto como llegue a 4?