0Pricing
C++ Academy · Leçon

Accéder aux valeurs d’optional

Utiliser value_or et has_value

Accéder aux valeurs d’optional est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.

Opérateur de déréférencement

Le moyen le plus rapide de lire un objet optionnel est *opt, mais uniquement lorsque vous êtes certain qu’il contient une valeur : aucune vérification n’est effectuée.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = 10;
    if (o) std::cout << *o << "\n";
}

La méthode value()

opt.value() renvoie la valeur, mais lève une exception std::bad_optional_access si l’objet optionnel est vide. Utilisez-la lorsqu’un objet optionnel vide constitue une véritable erreur.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o;
    try { std::cout << o.value() << "\n"; }
    catch (const std::bad_optional_access&) { std::cout << "empty!\n"; }
}

value_or pour les valeurs par défaut

opt.value_or(fallback) renvoie la valeur contenue si elle est présente, sinon la valeur de repli. Aucun branchement ni aucune exception.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = std::nullopt;
    std::cout << o.value_or(-1) << "\n"; // -1
}

value_or avec des données réelles

Il est courant de fournir ainsi une valeur par défaut lorsqu’un paramètre de configuration ou un résultat de recherche est absent.

#include <iostream>
#include <optional>
#include <string>
std::optional<std::string> lookup(bool found) {
    if (found) return std::string("Pro");
    return std::nullopt;
}
int main() {
    std::cout << lookup(false).value_or("Free") << "\n";
}

Opérateur flèche

Pour les objets optionnels de types classe, opt->member accède directement aux membres (en supposant une fois encore que l’objet n’est pas vide).

#include <iostream>
#include <optional>
#include <string>
int main() {
    std::optional<std::string> o = std::string("hello");
    if (o) std::cout << o->size() << "\n";
}

Vérifier avant d’accéder

L’idiome sûr consiste à vérifier, puis à utiliser. Combiner la vérification et l’accès évite à la fois les exceptions et les comportements indéfinis.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = 7;
    if (o.has_value()) {
        int x = *o;
        std::cout << x * 2 << "\n";
    }
}

Instruction d’initialisation dans if

Vous pouvez déclarer et vérifier en une seule ligne à l’aide d’une instruction d’initialisation de if, en limitant la portée de l’objet optionnel à la branche.

#include <iostream>
#include <optional>
std::optional<int> find() { return 3; }
int main() {
    if (auto v = find(); v.has_value())
        std::cout << *v << "\n";
}

Transformation (C++23)

Les utilitaires monadiques comme transform appliquent une fonction uniquement si une valeur est présente et renvoient un nouvel objet optionnel. Cela permet d’enchaîner proprement les calculs.

and_then pour enchaîner les opérations

and_then (C++23) appelle une fonction qui renvoie elle-même un objet optionnel et aplatit le résultat ; c’est idéal pour des étapes qui peuvent chacune échouer.

Choisir un accesseur

Utilisez value_or lorsque vous disposez d’une valeur par défaut pertinente, value() lorsque l’absence de valeur constitue une erreur justifiant une exception, et */-> uniquement après une vérification explicite.

Éviter le déréférencement non vérifié

N’appelez jamais *opt sans avoir confirmé que l’objet optionnel n’est pas vide. Cela constitue un comportement indéfini et une source fréquente de plantages.

Vérification rapide

Vérifiez votre compréhension de l’accès aux objets optionnels.

Récapitulatif

Vous avez appris à accéder aux objets optionnels :

  • * et -> après une vérification.
  • value() lève une exception lorsque l’objet est vide.
  • value_or fournit une valeur par défaut.
  • Les opérations monadiques transform/and_then permettent d’enchaîner les opérations (C++23).

Questions Fréquemment Posées

La leçon « Accéder aux valeurs d’optional » est-elle gratuite ?

Oui — le texte complet de « Accéder aux valeurs d’optional » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Accéder aux valeurs d’optional » ?

Utiliser value_or et has_value Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C++ Academy ?

Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Accéder aux valeurs d’optional » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?

Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Représenter l’absence avec optional
  2. Accéder aux valeurs d’optional
  3. Les bases de std::expected
  4. Schémas de gestion des erreurs
← Retour à C++ Academy