Operadores de asignación
Existen varios operadores de asignación, el más evidente y el más usado es el "=", pero en C++ este no es el único que existe.
Aquí hay una lista: "=", "*=", "/=", "%=", "+=", "-=", "<<=", ">>=", "&=", " =" y "|=". Y la sintaxis es:
<variable> <operador de asignación> <expresión> |
En general, para todos los operadores mixtos la expresión:
E1 op= E2
Tiene el mismo efecto que la expresión:
E1 = E1 op E2
El funcionamiento es siempre el mismo, primero se evalúa la expresión de la derecha, se aplica el operador mixto, si existe y se asigna el valor obtenido a la variable de la izquierda.
Los operadores del segundo al sexto son combinaciones del operador de asignación "=" y de los operadores aritméticos que hemos visto en el punto anterior. Tienen las mismas limitaciones que ellos, es decir, el operador "%=" sólo se puede aplicar a expresiones enteras.
El resto de los operadores son operadores de bits, y los veremos más adelante, en otro de los capítulos dedicado a operadores.
Operador coma
La coma tiene una doble función, por una parte separa elementos de una lista de argumentos de una función. Por otra, puede ser usado como separador en expresiones "de coma". Ambas funciones pueden ser mezcladas, pero hay que añadir paréntesis para resolver las ambigüedades. Sintaxis:
E1, E2, ..., En |
En una "expresión de coma", cada operando es evaluado como una expresión, pero los resultados obtenidos anteriormente se tienen en cuenta en las subsiguientes evaluaciones. Por ejemplo:
func(x, (y = 1, y + 2), 7); |
Llamará a la función con tres argumentos: (x, 3, 7). La expresión de coma (y = 1, y+2), se evalúa de izquierda a derecha, y el resultado de la última evaluación se pasará como argumento a la función.
Es muy frecuente usar estas expresiones dentro de bucles "for", (que veremos en el próximo capítulo). Por ejemplo:
for(i = 0, j = 1; i < 10; i++) ... |
Aquí vemos una expresión de coma que usamos para inicializar dos variables en la zona de inicialización del bucle.
No es aconsejable abusar de las expresiones de coma, aunque sólo sea porque apenas se usan, y suelen despistar a los que interpretan el código.
Por ejemplo, intenta predecir el valor de los parámetros de esta llamada a función:
func(19, (x=0, x+=3, x++), 12); |
Si has dicho: 19, 4 y 12, te has equivocado :).
Nota: recuerda que el operador de postincremento se evalúa después de evaluar la sentencia, en este caso, después de la llamada a la función. |
Operadores de comparación
Estos operadores comparan dos operandos, dando como resultado valores booleanos, true (verdadero) o false (falso), dependiendo de si los operandos cumplen o no la operación indicada.
Son "==" (dos signos = seguidos), "!=", "<", ">", "<=" y ">=", que comprueban relaciones de igualdad, desigualdad y comparaciones entre dos valores aritméticos. Sintaxis:
<expresión1> == <expresión2>
<expresión1> != <expresión2>
<expresión1> > <expresión2>
<expresión1> < <expresión2>
<expresión1> <= <expresión2>
<expresión1> >= <expresión2> |
Si el resultado de la comparación resulta ser verdadero, se retorna true, en caso contrario false. El significado de cada operador es evidente:
== igualdad
!= desigualdad
< menor que
<= menor o igual que
En la expresión "E1 <operador> E2", los operandos tienen algunas restricciones, pero de momento nos conformaremos con que E1 y E2 sean de tipo aritmético. El resto de las restricciones las veremos cuando conozcamos los punteros y los objetos.
Expresiones con operadores de igualdad
Cuando se hacen comparaciones entre una constante y una variable, es recomendable poner en primer lugar la constante, por ejemplo:
if(123 == a) ...
if(a == 123) ... |
Si nos equivocamos al escribir estas expresiones, y ponemos sólo un signo '=', en el primer caso obtendremos un error del compilador, ya que estaremos intentando cambiar el valor de una constante, lo cual no es posible. En el segundo caso, el valor de la variable cambia, y además el resultado de evaluar la expresión no dependerá de una comparación, sino de una asignación, y siempre será true, salvo que el valor asignado sea 0.
Por ejemplo:
if(a = 0) ... // siempre será false
if(a = 123)...
// siempre será <b>true</b>, ya que 123 es distinto de 0 |
El resultado de evaluar la expresión no depende de "a" en ninguno de los dos casos, como puedes ver.
En estos casos, el compilador, en el mejor de los casos, nos dará un "warning", o sea un aviso, pero compilará el programa.
Nota: los compiladores clasifican los errores en dos tipos, dependiendo de lo serios que sean:
"Errores": son errores que impiden que el programa pueda ejecutarse, los programas con "errores" no pueden pasar de la fase de compilación a la de enlazado, que es la fase en que se obtiene el programa ejecutable.
|
Comentarios