Utiliser un opérateur conditionnel en C++

Jinku Hu 12 octobre 2023
  1. Utiliser un opérateur conditionnel comme expression rvalue en C++
  2. Utiliser un opérateur conditionnel comme expression lvalue en C++
Utiliser un opérateur conditionnel en C++

Cet article explique comment utiliser un opérateur conditionnel C++.

Utiliser un opérateur conditionnel comme expression rvalue en C++

Outre les opérateurs arithmétiques, logiques et d’affectation communs, C++ fournit des opérateurs spéciaux, dont l’un est un opérateur ternaire conditionnel. Ternaire implique que l’opérateur prend trois opérandes. C’est ce qu’on appelle un opérateur conditionnel car il fonctionne de la même manière que l’instruction if-else. L’opérateur a la forme E1 ? E2 : E3, où le premier opérande peut être traité comme la condition if, qui est évaluée et convertie en valeur bool.

Si la valeur bool est true, l’expression suivante (E2) est évaluée et ses effets secondaires ont lieu. Sinon, la troisième expression (E3) est évaluée avec ses effets secondaires. Notez que nous pouvons utiliser cet opérateur comme expression rvalue pour affecter une valeur à une variable de manière conditionnelle. Dans l’exemple de code suivant, nous lisons un entier à partir d’une entrée utilisateur et évaluons l’expression de comparaison input > 10, représentant l’opérande E1 dans l’opérateur conditionnel. La variable n est affectée de la valeur input uniquement lorsque E1 est vrai.

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

Production:

Enter a single integer : 21 n = 21

Utiliser un opérateur conditionnel comme expression lvalue en C++

Alternativement, nous pouvons utiliser l’opérateur ternaire comme expression lvalue pour choisir conditionnellement un nom de variable sur lequel l’opération d’affectation est effectuée. Notez que nous spécifions uniquement les noms de variables comme deuxième et troisième opérandes. En général, cependant, vous pouvez spécifier des expressions telles que cout, qui a des effets secondaires externes; ces effets sont exécutés comme d’habitude.

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

Production:

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

Un autre cas d’utilisation de l’opérateur ternaire peut être dans la définition de class. L’exemple de code suivant illustre un tel scénario, dans lequel nous avons implémenté un constructeur récursif pour une structure MyClass similaire à un nœud dans une liste à liaison simple. Dans ce cas, nous spécifions l’appel du constructeur comme deuxième opérande, appelé avec l’argument next, et continuons la pile d’appels récursifs jusqu’à ce que node.next soit évalué à une valeur false. Ce dernier n’est le cas que lorsque le pointeur node.next est 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; }
Auteur: 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

Article connexe - C++ Operator