Usar un operador condicional en C++

Jinku Hu 12 octubre 2023
  1. Utilice un operador condicional como una expresión rvalue en C++
  2. Utilice un operador condicional como expresión lvalue en C++
Usar un operador condicional 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.

#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 :

Enter 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.

#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 :

Enter 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.

#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; }
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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 Facebook

Artículo relacionado - C++ Operator