Namespaces
Variants

std::experimental::optional<T>:: operator=

From cppreference.net
optional & operator = ( std:: experimental :: nullopt_t ) noexcept ;
(1) (bibliothèque fundamentals TS)
optional & operator = ( const optional & other ) ;
(2) (bibliothèque fundamentals TS)
optional & operator = ( optional && other ) noexcept ( /* voir ci-dessous */ ) ;
(3) (bibliothèque fundamentals TS)
template < class U >
optional & operator = ( U && value ) ;
(4) (bibliothèque fundamentals TS)

Remplace le contenu de * this par le contenu de other .

1) Si * this contient une valeur avant l'appel, la valeur contenue est détruite en appelant son destructeur comme si par val - > T :: ~T ( ) . * this ne contient pas de valeur après cet appel.
2,3) Assigne l'état de other .
  • Si ni * this ni other ne contiennent de valeur, la fonction n'a aucun effet.
  • Si * this contient une valeur mais que other n'en contient pas, alors la valeur contenue est détruite par appel à son destructeur. * this ne contient plus de valeur après l'appel.
  • Si other contient une valeur, alors selon que * this contienne ou non une valeur, la valeur contenue est soit initialisée directement soit assignée à partir de * other (2) ou de std :: move ( * other ) (3) . Notez qu'un optional déplacé contient toujours une valeur .
4) Affectation par transfert parfait avec décay uniquement : selon que * this contient ou non une valeur avant l'appel, la valeur contenue est soit initialisée directement à partir de std:: forward < U > ( value ) soit assignée à partir de std:: forward < U > ( value ) . La fonction ne participe pas à la résolution de surcharge sauf si std:: is_same < std:: decay_t < U > , T > :: value est true .

Table des matières

Paramètres

other - autre objet optional dont la valeur contenue doit être assignée
value - valeur à assigner à la valeur contenue
Exigences de type
-
T doit satisfaire aux exigences de CopyAssignable et CopyConstructible pour utiliser la surcharge (2).
-
T doit satisfaire aux exigences de MoveAssignable et MoveConstructible pour utiliser la surcharge (3).

Valeur de retour

* this

Exceptions

2-4) Lance toute exception levée par le constructeur ou l'opérateur d'affectation de T . Si une exception est levée, l'état d'initialisation de * this (et de other dans le cas de (2)) reste inchangé, c'est-à-dire que si l'objet contenait une valeur, il contient toujours une valeur, et vice versa. Le contenu de value et les valeurs contenues de * this et other dépendent des garanties de sécurité face aux exceptions de l'opération d'où provient l'exception (constructeur de copie, affectation par déplacement, etc.).
(3) possède la déclaration noexcept suivante :
noexcept specification :

Notes

Un objet optionnel op peut être transformé en un optionnel vide avec à la fois op = { } ; et op = nullopt ; .

Exemple

#include <experimental/optional>
#include <iostream>
int main()
{
    std::experimental::optional<const char*> s1 = "abc", s2; // constructeur
    s2 = s1; // affectation
    s1 = "def"; // affectation avec décroissance (U = char[4], T = const char*)
    std::cout << *s2 << ' ' << *s1 << '\n';
}

Sortie :

abc def

Voir aussi

construit la valeur contenue en place
(fonction membre publique)