Namespaces
Variants

std::optional<T>::operator->, std::optional<T>::operator*

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support linguistique
Support des types (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (obsolète en C++20)
 
 
constexpr const T* operator->() const noexcept;
(1) (depuis C++17)
constexpr T* operator->() noexcept;
(2) (depuis C++17)
constexpr const T& operator*() const& noexcept;
(3) (depuis C++17)
constexpr T& operator*() & noexcept;
(4) (depuis C++17)
constexpr const T&& operator*() const&& noexcept;
(5) (depuis C++17)
constexpr T&& operator*() && noexcept;
(6) (depuis C++17)

Accède à la valeur contenue.

1,2) Renvoie un pointeur vers la valeur contenue.
3-6) Renvoie une référence à la valeur contenue.

Si has_value() est false, le comportement est indéfini.

(jusqu'à C++26)

Si has_value() est false:

(depuis C++26)

Valeur de retour

1,2) val
3,4) * val
5,6) std :: move ( * val  )

Notes

Cet opérateur ne vérifie pas si * this contient une valeur, les utilisateurs peuvent le faire manuellement en utilisant has_value() ou operator bool() . Alternativement, si un accès vérifié est nécessaire, value() ou value_or() peuvent être utilisés.

Exemple

#include <iomanip>
#include <iostream>
#include <optional>
#include <string>
int main()
{
    using namespace std::string_literals;
    std::optional<int> opt1{1};
    std::cout << "opt1: " << *opt1 << '\n';
    *opt1 = 2;
    std::cout << "opt1: " << *opt1 << '\n';
    std::optional<std::string> opt2{"abc"s};
    std::cout << "opt2: " << std::quoted(*opt2) << ", size: " << opt2->size() << '\n';
    // Vous pouvez « prendre » la valeur contenue en appelant operator* sur un rvalue vers optional
    auto taken = *std::move(opt2);
    std::cout << "taken: " << std::quoted(taken) << "\n"
                 "opt2: " << std::quoted(*opt2) << ", size: " << opt2->size() << '\n';
}

Sortie :

opt1: 1
opt1: 2
opt2: "abc", size: 3
taken: "abc"
opt2: "", size: 0

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 2762 C++17 operator-> et operator* pouvaient potentiellement lever des exceptions rendus noexcept

Voir aussi

renvoie la valeur contenue
(fonction membre publique)
renvoie la valeur contenue si disponible, une autre valeur sinon
(fonction membre publique)