studio sirven sirve que punto programacion para operador móviles los desarrollo curso corchetes coma aplicaciones c++ c comma comma-operator

c++ - sirven - ¿Por qué no devuelve 0 o no funciona con el operador de coma?



para que sirven los corchetes en programacion (3)

El operador de coma es para expresiones.

La declaración de return y otras declaraciones puras no son expresiones.

Puedo escribir el código if(1) x++, y++; en lugar de if(1) {x++; y++;} if(1) {x++; y++;} , pero en algunos casos no funciona (ver abajo). Sería bueno que me cuentes sobre esto.

int x = 5, y = 10; if (x == 5) x++, y++; // It works if (x == 5) x++, return 0; // It shows an error

Lo mismo se aplica a los bucles for :

for (int i = 0; i < 1; i++) y++, y += 5; // It works for (int i = 0; i < 1; i++) y++, break; // Does not work


El operador de coma es un operador binario que toma dos valores. De esta manera, es lo mismo que + o * . Mientras que + agrega dos valores y devuelve el resultado, y * multiplica dos valores y devuelve el resultado, el operador de coma simplemente ignora el valor a la izquierda y devuelve el valor a la derecha.

2 + 5 tiene valor 7

2 * 5 tiene valor 10

2 , 5 tiene el valor 5 , simplemente el operando a la derecha del operador.

Y entonces no puedes escribir 2,break por la misma razón por la que no puedes escribir 2+break . Porque romper es una afirmación, no un valor.

¿De qué sirve un operador binario que ignora uno de sus operandos? El operador de coma ignora el valor del operando izquierdo, pero la expresión aún se evalúa. Cualquier efecto secundario de esa expresión todavía se realiza. Considerar:

i = 2; j = 5; i++, j++;

Primero, se evalúan las dos expresiones. i++ devuelve el valor 2 y luego aumenta i . j++ devuelve el valor 5 y luego aumenta j . Finalmente, el operador de coma se aplica a estos dos valores: 2,5 que ignora el 2 y devuelve el 5 .


Eso es porque el return y el break son declaraciones, no expresiones. Como tal, no puedes usarlo en otra expresión de ninguna manera. if y los otros son también declaraciones similares.

Sin embargo, lo que puedes hacer es volver a escribir tu expresión (para return ) para que no esté anidada en una expresión, no es que recomiendo escribir un código como ese:

return x++, 0;

No puedes hacer eso para el break porque no acepta una expresión.