Operador coma
|
Operador coma. En C++ la coma puede ser un elemento de puntuación (separador de expresiones) y un operador, dando lugar a las denominadas expresiones con coma. 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
Sintaxis
expresion , expresion-de-asignacion
Comentario
La coma separa elementos en las listas de parámetros de las funciones, también se usa como un operador en las expresiones con coma. Es legal mezclar ambos usos, pero deben usarse paréntesis para distinguirlas y evitar ambigüedades. Por ejemplo, la expresión:
func(i, (j = 1, j + 4), k);
Llama a func con tres argumentos: (i, 5, k), no cuatro. Cuando la coma se usa como operador, por ejemplo: E1, E2, el operando de la izquierda E1 es evaluado como una expresión void (no produce ningún resultado), después se evalúa la expresión E2 de la derecha, su valor y tipo son los que toma la expresión de coma. Por recursión, la expresión: E1, E2, ..., En, produce la evaluación de izquierda a derecha de todas las expresiones Ei y la expresión total adopta el valor de En. Es el operador de precedencia más baja de todos.
Ejemplos
sum = (i = 3, i++, i++); // sum = 4, i = 5
func((exp1, exp2), (exp3, exp4, exp5)); // llama a func con dos argumentos
return pass ? (puts("Acierto!"), 0) : (puts("Fallo!"), 1);
La invocación a func en la segunda línea se realiza con dos argumentos, los resultados de exp2 y exp5 respectivamente. En la tercera línea, el programa devuelve 0 o 1 según el valor pass, pero previamente indica el resultado en pantalla, ya que las dos alternativas conducen a la ejecución de una expresión con coma. El operador coma debe ser usado con moderación y es frecuentemente utilizado en los bucles for como en el ejemplo.
void reverse (char s[]) { // invertir la cadena s int c, i, j; for ( i = 0 , j = strlen(s)-1 ; i < j ; i++, j--) { c = s[i], s[i] = s[j], s[j] = c; } }
Esta posibilidad, incluir expresiones con coma en el argumento <[incremento]> de los bucles, permite combinaciones muy interesantes y una notación muy compacta, aunque resultan algo crípticas en una primera lectura.
Véase también
- Operadores
- Operadores aritméticos
- Operadores lógicos
- Operadores de manejo de bits
- Operador condicional
- Operadores relacionales
- Operadores de asignación
- Operadores de modelado de tipos
- Operadores añadidos a expresión
- Operador de acceso a ámbito
- Operadores de puntero
- Operador new
- Operador delete
- Operador sizeof
- Operador typeid
- Operador de preproceso