El operador de coma en c ++

Video: Tutorial Programacion en C - 7 - Operadores de Incremento y Decremento

Hay un operador aparentemente inútil en C ++ conocido como el operador de coma. Aparezca como sigue: expresión1, expression2-. Esto dice ejecutar expresión1 y luego ejecutar expresión2. El valor resultante y el tipo de la expresión general es la misma que la de expresión2.

Por lo tanto, se podría decir algo como lo siguiente:

int i-int j-i = 1, j = 2-

¿Por qué le va a querer hacer una cosa así? Respuesta: No sería escribir excepto cuando para bucles.

Video: Como usar operador sizeof en C++

El seguimiento CommaOperator programa demuestra el operador coma en combate. Este programa calcula los productos de pares de números. Si el operador introduce N, los productos del programa 1 * N, 2 * N-1, 3 * N-2, y así sucesivamente, todo el camino hasta N * 1. (Este programa no hace nada particularmente útiles.)

//// CommaOperator - demuestran cómo el operador coma // se utiliza dentro de una de loop.//#include #incluir #incluir usando espacio de nombres std-int main (int nNumberofArgs, char * pszArgs []) {// introduzca un numberint objetivo nTarget-cout lt; lt; "Introduzca el valor máximo: "-cin gt; gt; nTarget-for (int nLower = 1, nUpper = nTarget-nLower lt; = nTarget- nLower ++, nUpper -) {cout lt; lt; nLower lt; lt; " * "lt; lt; nUpper lt; lt; " es igual "lt; lt; nLower * nUpper lt; lt; endl -} // espera hasta que el usuario esté listo antes de finalizar el programa // para permitir al usuario ver el programa resultscout lt; lt; "Pulse Intro para continuar ..." lt; lt; endl-cin.ignore (10, `n`) - cin.get () - volver 0-}

El programa le pide primero el operador de un valor objetivo, que se lee en nTarget. A continuación se pasa a la para lazo. Sin embargo, esta vez no sólo hacer que desea incrementar una variable de 1 a nTarget, también quiere disminuir una segunda variable a partir de nTarget a 1.

Aquí la cláusula de configuración de la para bucle declara una variable nLower que inicializa a 1 y una segunda variable nTarget Eso hace que inicializan a nTarget. El cuerpo de las pantallas de bucle nLower, nUpper, y el producto nLower * nTarget. los incremento incrementos de sección nLower y decrementos nUpper.

La salida del programa aparece como sigue:

Introduzca el valor máximo: 151 * 15 es igual a 152 * 14 es igual a 283 * 13 es igual a 394 * 12 es igual a 485 * 11 es igual a 556 * 10 es igual a 607 * 9 es igual a 638 * 8 es igual a 649 * 7 es igual a 6,310 * 6 es igual a 6,011 * 5 es igual a 5,512 * 4 es igual a 4,813 * 3 es igual a 3914 * 2815 * 2 es igual a 1 es igual a 15Pulse Intro para continuar. . .

En este ejemplo de ejecución, 15 es el valor objetivo. Se puede ver cómo nLower incrementos en línea recta de 1 a 15, mientras nUpper se abre paso desde el 15 hasta el 1.

En realidad, la salida de este programa es medianamente interesante: No importa lo que escribe, el valor de los productos aumenta rápidamente al principio como nLower incrementos de 1. Con bastante rapidez, sin embargo, la curva se aplana y se aproxima asintóticamente al valor máximo en el centro de la gama antes de volver a bajar. El valor máximo para el producto siempre se produce cuando nLower y nUpper son iguales.

Podría haber hecho el anterior para el trabajo de bucle sin utilizar el operador coma? Absolutamente. Que podría haber tenido ninguna de las variables, nLower o nUpper, fuera de para bucle y los manejó como variables independientes. Considere el siguiente fragmento de código:

nUpper = nTarget-for (int nLower = 1- nLower lt; = nTarget- nLower ++) {cout lt; lt; nLower lt; lt; " * "lt; lt; nUpper lt; lt; " es igual "lt; lt; nLower * nUpper lt; lt; endl-nUpper ---}

Esta versión habría funcionado igual de bien.

los para bucle no puede hacer nada que una mientras bucle no puede hacer. De hecho, cualquier para bucle se puede convertir en un equivalente mientras lazo. Sin embargo, debido a su tamaño compacto, verá el para lazo mucho más a menudo.

Artículos Relacionados