- Operador compuesto
- Operador-expresión
- Operador de retorno return
- Operador condicional if-else
- Operador condicional ?:
- Operador switch
- Operador cíclico while
- Operador cíclico for
- Operador cíclico do while
- Operador break
- Operador de continuación continue
- Operador de producto matricial
- Operador-creador de objetos new
- Operador-eliminador de objetos delete
Operador condicional ?:
La forma general de un operador ternario es la siguiente:
expresión1? expresión2:expresión3 |
Como el primer operando - "expresión1" se puede utilizar cualquier expresión, el resultado de la cual es el valor del tipo bool. Si el resultado es true, entonces se ejecuta el operador asignado por el segundo operando, es decir, "expresión2".
Si el primer operando es igual a false, entonces se ejecuta el tercer operando "expresiónЗ". El segundo y el tercer operando, es decir, "expresión2" y "expresión3" tienen que retornar los valores del mismo tipo y no deben tener el tipo void. El resultado de ejecución del operador condicional es el resultado de la expresión2 o el de la expresión3, dependiendo del resultado de la expresión1.
//--- normalizamos la diferencia entre los precios de apertura y de cierre para el rango diario
|
Esta entrada es equivalente a la siguiente
double true_range;
|
Limitaciones en el uso del operador #
A base del valor "expresión1" el operador tiene que devolver uno de dos valores - "expresión2" o "expresión3". Existe una serie de limitaciones para estas expresiones:
- No se puede confundir el tipo definido por el usuario con el tipo simple o enumeración. Para el puntero se puede utilizar NULL.
- Si los tipos de los valores son simples, entonces el tipo del operador será el tipo máximo (véase Conversión de tipos).
- Si uno de los valores tiene el tipo de enumeración y el segundo es del tipo numérico, la enumeración se reemplace con int y se aplica la segunda regla.
- Si los dos valores son valores de enumeración, entonces sus tipos tienen que ser iguales, y el tipo del operador será la enumeración.
Limitaciones para los tipos definidos por el usuario (clases o estructuras):
- los tipos tienen que ser idénticos o uno debe heredarse del otro.
- si los tipos no son idénticos (la herencia), entonces el hijo se convierte al padre de forma implícita, es decir el tipo del operador va a ser del tipo del padre.
- no se puede confundir el objeto y el puntero - o las dos expresiones son objetos, o bien los punteros. Se puede usar NULL para el puntero.
Nota
Tenga cuidado a la hora de usar el operador condicional como un argumento de la función sobrecargada, porque el tipo del resultado del operador condicional se determina en el momento de compilación del programa. Y este tipo se determina como el más grande de los tipos "expresión2" y "expresión3".
Ejemplo:
void func(double d) { Print("double argument: ",d); }
|
Véase también
Inicialización de variables, Visibilidad y tiempo de vida de variables, Creación y eliminación de objetos