std::optional<T>::operator->, std::optional<T>::operator*
Von cppreference.com
| constexpr const T* operator->() const noexcept; |
(1) | (seit C++17) |
| constexpr T* operator->() noexcept; |
(1) | (seit C++17) |
| constexpr const T& operator*() const& noexcept; |
(2) | (seit C++17) |
| constexpr T& operator*() & noexcept; |
(2) | (seit C++17) |
| constexpr const T&& operator*() const&& noexcept; |
(2) | (seit C++17) |
| constexpr T&& operator*() && noexcept; |
(2) | (seit C++17) |
Greift auf den enthaltenen Wert zu.
1) Gibt einen Zeiger auf den enthaltenen Wert zurück.
2) Gibt eine Referenz auf den enthaltenen Wert zurück.
Das Verhalten ist undefiniert, wenn *this keinen Wert enthält.
Inhalt |
[bearbeiten] Parameter
(keine)
[bearbeiten] Rückgabewert
Zeiger oder Referenz auf den enthaltenen Wert.
[bearbeiten] Hinweise
Dieser Operator prüft nicht, ob der Optional einen Wert enthält! Dies kann manuell mit has_value() oder einfach operator bool() erfolgen. Alternativ kann, falls ein geprüfter Zugriff benötigt wird, value() oder value_or() verwendet werden.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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'; // You can "take" the contained value by calling operator* on an rvalue to optional auto taken = *std::move(opt2); std::cout << "taken: " << std::quoted(taken) << "\n" "opt2: " << std::quoted(*opt2) << ", size: " << opt2->size() << '\n'; }
Ausgabe
opt1: 1 opt1: 2 opt2: "abc", size: 3 taken: "abc" opt2: "", size: 0
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2762 | C++17 | operator-> und operator* könnten potenziell werfen |
wurde zu `noexcept` gemacht |
[bearbeiten] Siehe auch
| gibt den enthaltenen Wert zurück (public member function) | |
| gibt den enthaltenen Wert zurück, falls vorhanden, sonst einen anderen Wert (public member function) |