tipos sintaxis sentencia programacion estructuras estructura ejemplos decisiones decision condiciones anidadas c++ return language-lawyer operator-precedence comma-operator

sintaxis - ¿Comportamiento diferente del operador de coma en C++ con retorno?



sintaxis de c++ (4)

De acuerdo con la precedencia del operador , el operador de coma tiene una precedencia menor que el operator= , entonces x = 2,3; es equivalente a (x = 2),3; . (La precedencia del operador determina cómo el operador estará vinculado a sus argumentos, más estricto o más suelto que otros operadores de acuerdo con sus precedentes).

Tenga en cuenta que la expresión de coma es (x = 2),3 aquí, no 2,3 . x = 2 se evalúa al principio (y se completan sus efectos secundarios), luego se descarta el resultado, luego se evalúa 3 (de hecho, no hace nada). Es por eso que el valor de x es 2 . Tenga en cuenta que 3 es el resultado de la expresión de coma completa (es decir, x = 2,3 ), no se utilizará para asignar a x . (Cámbielo a x = (2,3); x se le asignará 3 ).

Para el return 2,3; , la expresión de coma es 2,3 , 2 se evalúa y luego se descarta su resultado, y luego 3 se evalúa y se devuelve como el resultado de la expresión de coma completa, que luego se devuelve mediante la declaración de retorno .

Información adicional sobre Expressions y Statements

Una expresión es una secuencia de operadores y sus operandos, que especifica un cálculo.

x = 2,3; es una declaración de expresión , x = 2,3 es la expresión aquí.

Una expresión seguida de un punto y coma es una declaración.

Sintaxis: attr(optional) expression(optional) ; (1) attr(optional) expression(optional) ; (1)

return 2,3; es la declaración de salto ( declaración de retorno ), 2,3 es la expresión aquí.

Sintaxis: attr(optional) return expression(optional) ; (1) attr(optional) return expression(optional) ; (1)

Esto (tenga en cuenta el operador de coma ):

#include <iostream> int main() { int x; x = 2, 3; std::cout << x << "/n"; return 0; }

salidas 2 .

Sin embargo, si usa return con el operador de coma, esto:

#include <iostream> int f() { return 2, 3; } int main() { int x; x = f(); std::cout << x << "/n"; return 0; }

salidas 3 .

¿Por qué el operador de coma se comporta de manera diferente con return ?


El operador de coma (también conocido como separación de expresiones ) se evalúa de izquierda a derecha. Entonces return 2,3; es equivalente a return 3; .

La evaluación de x = 2,3; es (x = 2), 3; debido a la precedencia del operador . La evaluación todavía es de izquierda a derecha, y toda la expresión tiene el valor 3 con el efecto secundario de x asumiendo el valor de 2.


Esta declaración:

x = 2,3;

está compuesto por dos expresiones :

> x = 2 > 3

Dado que la precedencia del operador , = tiene más precedencia que la coma, entonces x = 2 se evalúa y después de 3 . Entonces x será igual a 2 .

En return cambio:

int f(){ return 2,3; }

La sintaxis del lenguaje es:

return <expression>

Nota return no es parte de la expresión.

Entonces, en ese caso, las dos expresiones que se evaluarán serán:

> 2 > 3

Pero solo se devolverá el segundo ( 3 ).


Intente aplicar el enfoque simplista simplemente resaltando la precedencia con paréntesis:

( x = 2 ), 3;

return ( 2, 3 );

Ahora podemos ver el operador binario "," trabajando de la misma manera en ambos, de izquierda a derecha.