0Pricing
C++ Academy · Leçon

Représenter l’absence avec optional

Éviter les pointeurs nuls

Représenter l’absence avec optional est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 1 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.

Le problème de la valeur nulle

Renvoyer une valeur sentinelle comme -1 ou un pointeur nul pour signifier « aucune valeur » est fragile et facile à utiliser incorrectement. std::optional<T> représente explicitement « une valeur ou rien ». Incluez <optional>.

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

Un objet optionnel vide

Construire un objet optionnel par défaut, ou lui affecter std::nullopt, produit un objet vide qui ne contient aucune valeur.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> empty;
    std::optional<int> also = std::nullopt;
    std::cout << empty.has_value() << " " << also.has_value() << "\n";
}

Vérifier la présence d’une valeur

Appelez has_value() ou utilisez directement l’objet optionnel dans un contexte booléen pour vérifier s’il contient quelque chose.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = 5;
    if (o) std::cout << "has value\n";
    if (o.has_value()) std::cout << "yes\n";
}

Un objet optionnel comme type de retour

Les fonctions qui peuvent ne produire aucun résultat s’y prêtent parfaitement. Retournez la valeur en cas de réussite et std::nullopt en cas d’échec.

#include <iostream>
#include <optional>
std::optional<int> half(int n) {
    if (n % 2 == 0) return n / 2;
    return std::nullopt;
}
int main() {
    auto r = half(10);
    if (r) std::cout << *r << "\n";
}

Lire la valeur

Utilisez *opt ou opt.value() une fois que vous savez que l’objet contient une valeur. Déréférencer un objet optionnel vide avec * constitue un comportement indéfini.

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

Des signatures explicites

Un type de retour std::optional indique immédiatement à l’appelant que la fonction peut ne produire aucun résultat ; aucun commentaire n’est nécessaire.

#include <iostream>
#include <optional>
#include <string>
std::optional<std::string> getEnvName(bool present) {
    if (present) return std::string("CONFIG");
    return std::nullopt;
}
int main() { std::cout << getEnvName(true).has_value() << "\n"; }

Réinitialiser un objet optionnel

Appelez reset() pour rendre à nouveau un objet optionnel vide, ou affectez-lui std::nullopt.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = 99;
    o.reset();
    std::cout << o.has_value() << "\n"; // 0
}

Construire sur place

emplace construit directement la valeur contenue dans l’objet optionnel, ce qui évite une copie supplémentaire.

#include <iostream>
#include <optional>
#include <string>
int main() {
    std::optional<std::string> o;
    o.emplace("built in place");
    std::cout << *o << "\n";
}

Objet optionnel ou pointeur

Un pointeur brut peut être nul, mais n’indique rien sur la propriété et risque de devenir pendant. Un objet optionnel possède sa valeur directement et signale clairement qu’elle peut être absente, sans allocation sur le tas.

Un objet optionnel de références ?

std::optional stocke des valeurs, pas des références. Pour faire éventuellement référence à un objet existant, stockez un pointeur ou utilisez std::optional<std::reference_wrapper<T>>.

Quand utiliser un objet optionnel

Utilisez-le pour les recherches susceptibles d’échouer, l’analyse syntaxique pouvant échouer ou les paramètres pouvant ne pas être définis. La prochaine leçon présente des moyens sûrs d’accéder à la valeur contenue.

Vérification rapide

Vérifiez votre compréhension de std::optional.

Récapitulatif

Vous avez découvert les bases de std::optional :

  • Il représente « une valeur ou rien » sans valeur sentinelle ni valeur nulle.
  • Il est vide après une construction par défaut ou avec std::nullopt.
  • Vérifiez son contenu avec has_value() ou un test booléen.
  • Il constitue un type de retour idéal pour les recherches susceptibles d’échouer.

Questions Fréquemment Posées

La leçon « Représenter l’absence avec optional » est-elle gratuite ?

Oui — le texte complet de « Représenter l’absence avec 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 « Représenter l’absence avec optional » ?

Éviter les pointeurs nuls 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 1 sur 4.

Combien de temps prend la leçon « Représenter l’absence avec 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