Usa un operatore condizionale in C++
-
Utilizzare un operatore condizionale come espressione
rvalue
in C++ -
Utilizzare un operatore condizionale come espressione
lvalue
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; }
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