Usa un operatore condizionale in C++

Jinku Hu 12 ottobre 2023
  1. Utilizzare un operatore condizionale come espressione rvalue in C++
  2. Utilizzare un operatore condizionale come espressione lvalue in C++
Usa un operatore condizionale in C++

Questo articolo spiegherà come utilizzare un operatore condizionale C++.

Utilizzare un operatore condizionale come espressione rvalue in C++

Oltre ai comuni operatori aritmetici, logici e di assegnazione, il C++ fornisce alcuni operatori speciali, uno dei quali è un operatore ternario condizionale. Ternario implica che l’operatore accetta tre operandi. Si chiama operatore condizionale perché funziona in modo simile all’istruzione if-else. L’operatore ha la forma di E1 ? E2 : E3, dove il primo operando può essere trattato come la condizione if, che viene valutata e convertita nel valore bool.

Se il valore bool è true, viene valutata la seguente espressione (E2) e si verificano i suoi effetti collaterali. In caso contrario, la terza espressione (E3) viene valutata con i suoi effetti collaterali. Si noti che possiamo utilizzare questo operatore come espressione rvalue per assegnare un valore a una variabile in modo condizionale. Nel codice di esempio seguente, leggiamo un numero intero dall’input dell’utente e valutiamo l’espressione di confronto input > 10, che rappresenta l’operando E1 nell’operatore condizionale. Alla variabile n viene assegnato il valore di input solo quando E1 è vero.

#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;
}

Produzione:

Enter a single integer : 21 n = 21

Utilizzare un operatore condizionale come espressione lvalue in C++

In alternativa, possiamo utilizzare l’operatore ternario come espressione lvalue per scegliere condizionalmente un nome di variabile su cui eseguire l’operazione di assegnazione. Nota che specifichiamo solo i nomi delle variabili come secondo e terzo operando. In genere, però, è possibile specificare espressioni come cout, che ha effetti collaterali esterni; questi effetti vengono eseguiti come al solito.

#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;
}

Produzione:

Enter a single integer : 21 n = 21 m = 302

Un altro caso d’uso per l’operatore ternario può essere nella definizione di class. Il seguente esempio di codice mostra uno scenario di questo tipo, in cui abbiamo implementato un costruttore ricorsivo per una struttura MyClass simile a un nodo in un elenco con collegamento singolo. In questo caso, specifichiamo la chiamata al costruttore come secondo operando, chiamato con l’argomento next, e continuiamo lo stack di chiamate ricorsive finché node.next restituisce un valore false. Quest’ultimo è il caso solo quando il puntatore node.next è 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; }
Autore: 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

Articolo correlato - C++ Operator