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 un comportamiento indefinido std::cin >> i >> ++i;

Estoy tratando de entender el orden de evaluación de expresiones en C++. Tengo los siguientes ejemplos:

int i = 0;
std::cin >> i >> i; //¿ES ESTO UN COMPORTAMIENTO INDEFINIDO?

Mi primera pregunta es si el fragmento mostrado anteriormente produce un comportamiento indefinido.

A continuación,

int i = 0;
std::cin >> i >> ++i; //¿ES ESTO UN COMPORTAMIENTO INDEFINIDO?

Mi segunda pregunta es si este fragmento produce un comportamiento indefinido.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Respuestas

    Pregunta 1

    Este fragmento de código no produce un comportamiento indefinido. El orden de evaluación del operador >> es de izquierda a derecha, por lo que std::cin >> i se evalúa primero, seguido de std::cin >> i. Es seguro realizar múltiples extracciones en el mismo objeto std::istream sin causar un comportamiento indefinido.

    Pregunta 2

    Este fragmento de código produce un comportamiento indefinido. El orden de evaluación del operador >> sigue siendo de izquierda a derecha, por lo que std::cin >> i se evalúa primero, seguido de ++i. Sin embargo, el orden de evaluación de los operandos del operador >> no está especificado. Es posible que ++i se evalúe primero, seguido de std::cin >> i. Si eso sucede, el comportamiento es indefinido porque i se modifica varias veces entre dos puntos de secuencia, lo cual no está permitido en C++.

Comments are closed.