es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es correcto std::views::reverse en un rango infinito?

Mira este ejemplo de código: enlace:

#include <ranges>

int main() {
    for(auto i : std::ranges::iota_view(1) | std::views::reverse) 
        break;
}

Se compila en gcc (no puedo verificar en clang/msvc, ya que no admiten rangos).
Por supuesto, se ejecuta “infinitamente” y no hace nada.

También verifiqué que hacer std::ranges::rbegin(inf) o std::ranges::rend(inf) en un rango infinito no está permitido (no se compila).

No estoy seguro si este es código c++ correcto.
Y estoy curioso acerca de la implementación de std::ranges::reverse – parece que no utiliza rbegin/rend para implementar esta vista, entonces ¿cómo funciona esta implementación?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El código proporcionado es un código correcto en C++ y se compila correctamente en GCC. Sin embargo, el bucle for se ejecuta indefinidamente y no realiza ninguna tarea útil.

    Por otro lado, intentar usar std::ranges::rbegin o std::ranges::rend en un rango infinito no está permitido y el código no se compilará.

    En cuanto a la implementación de std::ranges::reverse, no utiliza rbegin o rend. En su lugar, opera envolviendo un rango y su rango de iteradores en un std::reverse_iterator, que produce los elementos en orden inverso.

Comments are closed.