Usar un operador condicional en C++
-
Utilice un operador condicional como una expresión
rvalue
en C++ -
Utilice un operador condicional como expresión
lvalue
en C++
Este artículo explicará cómo utilizar un operador condicional de C++.
Utilice un operador condicional como una expresión rvalue
en C++
Además de los operadores aritméticos, lógicos y de asignación comunes, C++ proporciona algunos operadores especiales, uno de los cuales es un operador ternario condicional. Ternario implica que el operador toma tres operandos. Se llama operador condicional porque funciona de manera similar a la instrucción if-else
. El operador tiene la forma de E1 ? E2 : E3
, donde el primer operando puede tratarse como la condición if
, que se evalúa y convierte en el valor bool
.
Si el valor bool
es true
, se evalúa la siguiente expresión (E2
) y se producen sus efectos secundarios. De lo contrario, la tercera expresión (E3
) se evalúa con sus efectos secundarios. Observe que podemos utilizar este operador como la expresión rvalue
para asignar un valor a una variable de forma condicional. En el siguiente código de ejemplo, leemos un número entero de la entrada del usuario y evaluamos la expresión de comparación input > 10
, que representa el operando E1
en el operador condicional. A la variable n
se le asigna el valor de input
sólo cuando E1
es verdadero.
++ cCopy#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
int input;
cout << "Enter a single integer: ";
cin >> input;
int n = input > 10 ? input : 10;
cout << "n = " << n << endl;
return EXIT_SUCCESS;
}
Producción :
textCopyEnter a single integer: 21
n = 21
Utilice un operador condicional como expresión lvalue
en C++
Alternativamente, podemos utilizar el operador ternario como una expresión lvalue
para elegir condicionalmente un nombre de variable en el que se realiza la operación de asignación. Tenga en cuenta que solo especificamos los nombres de las variables como segundo y tercer operandos. Generalmente, sin embargo, puede especificar expresiones como cout
, que tiene efectos secundarios externos; estos efectos se ejecutan como de costumbre.
++ cCopy#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
int input;
cout << "Enter a single integer: ";
cin >> input;
int n = input > 10 ? input : 10;
cout << "n = " << n << endl;
int m = 30;
(n == m ? n : m) = (m * 10) + 2;
cout << "m = " << m << endl;
return EXIT_SUCCESS;
}
Producción :
textCopyEnter a single integer: 21
n = 21
m = 302
Otro caso de uso para el operador ternario puede estar en la definición de class
. El siguiente ejemplo de código demuestra un escenario de este tipo, en el que implementamos un constructor recursivo para una estructura MyClass
similar a un nodo en una lista enlazada individualmente. En este caso, especificamos la llamada al constructor como el segundo operando, llamado con el argumento next
, y continuamos la pila de llamadas recursivas hasta que node.next
se evalúa como un valor false
. Este último es solo el caso cuando el puntero node.next
es nullptr
.
++ cCopy#include <iostream>
#include <string>
struct MyClass {
MyClass* next;
int data;
MyClass(const MyClass& node)
: next(node.next ? new MyClass(*node.next) : nullptr), data(node.data) {}
MyClass(int d) : next(nullptr), data(d) {}
~MyClass() { delete next; }
};
int main() { return EXIT_SUCCESS; }
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn FacebookArtículo relacionado - C++ Operator
- Implemente la instrucción if con múltiples condiciones en C++
- Operador de flecha vs. Operador de puntos en C++
- Operador de negación unaria en C++
- Precedencia de operadores y asociatividad en C++
- Sobrecargue el operador de soporte en C++
- Sobrecargar operadores de inserción de flujo de entrada y salida en C++