kennen:include:optional
no way to compare when less than two revisions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | kennen:include:optional [2017-05-02 15:18] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== < | ||
+ | ===== Wert, sofern vorhanden ===== | ||
+ | Nicht in jedem Fall kann eine Funktion einen sinnvollen Wert liefern. So existiert in einer leeren Folge kein kleinster Wert. | ||
+ | C++17 kann dies mit '' | ||
+ | <code cpp> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | std:: | ||
+ | { | ||
+ | if (v.empty()) return {}; | ||
+ | else return *min_element(v.begin(), | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Zugriff ===== | ||
+ | Ohne gültigen Wert wirft der Zugriff mit der Methode '' | ||
+ | mit '' | ||
+ | <code cpp> | ||
+ | auto result = find_smallest({}); | ||
+ | std::cout << result.value_or(0) << ' | ||
+ | |||
+ | try | ||
+ | { | ||
+ | std::cout << result.value() << ' | ||
+ | } | ||
+ | catch(const std:: | ||
+ | { | ||
+ | std::cerr << e.what() << ' | ||
+ | } | ||
+ | </ | ||
+ | ===== Zeiger-Syntax ===== | ||
+ | Optionale Variablen können wie smarte Zeiger angesprochen werden. Bei vorhandenem Objekt erfolgt der ungeprüfte Zugriff mit dem Operator '' | ||
+ | <code cpp> | ||
+ | if (auto result2 = find_smallest({1, | ||
+ | { | ||
+ | std::cout << *result2 << ' | ||
+ | } | ||
+ | </ | ||
+ | ===== Löschen und ändern ===== | ||
+ | Ein '' | ||
+ | Die Zuweisung eines Wertes erfolgt mit '' | ||
+ | <code cpp> | ||
+ | result.reset(); | ||
+ | result = std:: | ||
+ | result = 42; | ||
+ | std::cout << *result << ' | ||
+ | </ | ||
+ | |||
+ | ===== Objekt aus Parametern bauen ===== | ||
+ | Das zu verpackende Objekt kann aus seinen Konstruktorparametern direkt im Wrapper gebaut werden: | ||
+ | <code cpp> | ||
+ | auto o = std:: | ||
+ | |||
+ | o.emplace< | ||
+ | </ |
kennen/include/optional.txt · Zuletzt geändert: 2017-05-02 15:18 von 127.0.0.1