Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

274
Visualizações
Evaluación de cortocircuito de una declaración con el operador ++ en C

He ejecutado el siguiente código en Code::Blocks 10.05 en Windows 7.

 int a=0,b=0,c; c=a++&&b++; printf("\na=%d\nb=%d\nc=%d\n\n",a,b,c);

La salida que obtuve se da a continuación,

 a=1 b=0 c=0

Esto tiene mucho sentido debido a la evaluación de cortocircuito.

La expresión a++ es un incremento posterior y 0 se devuelve a la lógica y ( && ). Por lo tanto, la parte b++ no se evalúa ya que tanto 0 && 0 como 0 && 1 se evalúan como 0 .

Pero aquí surge mi duda. El valor de precedencia de los operadores establece claramente que ++ tiene mayor precedencia que && . Entonces, mi entendimiento fue así, tanto a++ como b ++ se evalúan y luego && solo verifica el resultado de la expresión a++ para tomar una decisión. Pero esto no ha sucedido, aquí solo se evalúa a++ .

¿Cuál es la razón de este comportamiento? ¿ && ser un punto de secuencia tiene algo que ver con este comportamiento? Si es así, ¿por qué decimos que && tiene una precedencia menor que ++ ?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Está confundido acerca de la precedencia y el orden de evaluación .

La precedencia define cómo se agrupan los operadores, es decir

 c = a++ && b++;

es equivalente a:

 c = ((a++) && (b++));

El orden de evaluación define cómo se evalúa la expresión, el cortocircuito de && significa que a++ se evalúa primero, si es cero, al final; si no es cero, entonces se evalúa b++ .


Como otro ejemplo:

 c = (a++) + (b++);

¿Se evalúa a++ antes que b++ ? La respuesta es que no lo sabemos. La mayoría de los operadores no definen el orden de evaluación. && es uno de los pocos operadores que definen. (El resto son || , , y ?: )

over 4 years ago · Santiago Trujillo Relatório

0

Aquí hay dos conceptos: orden de precedencia y orden de evaluación. El orden de precedencia tendrá un impacto solo si se evalúa una expresión (o subexpresión).

En general, el orden de evaluación no está secuenciado. Dado un operador, sus operandos pueden evaluarse en cualquier orden. Los argumentos de una función se pueden evaluar en cualquier orden.

Del estándar C++:

1.9 Ejecución del programa

15 Excepto donde se indique, las evaluaciones de operandos de operadores individuales y de subexpresiones de expresiones individuales no están secuenciadas.

y

8.3.6 Argumentos predeterminados

9 Los argumentos predeterminados se evalúan cada vez que se llama a la función. El orden de evaluación de los argumentos de función no está especificado.

Para el operador lógico AND, && , el estándar C++11 dice:

5.14 Operador lógico AND

1 El operador && agrupa de izquierda a derecha. Ambos operandos se convierten contextualmente al tipo bool (Cláusula 4). El resultado es true si ambos operandos son true y false en caso contrario. A diferencia & , && garantiza una evaluación de izquierda a derecha: el segundo operando no se evalúa si el primer operando es false .

Se especifica una excepción similar para el operador lógico OR, || .

Dado que b++ no se evalúa debido a un cortocircuito de la expresión debido al operador && , el orden de precedencia de los operadores no tiene importancia en este caso particular.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda