std::optional<T>::operator->, std::optional<T>::operator*
constexpr const T* operator->() const noexcept; | (1) | (since C++17) |
constexpr T* operator->() noexcept; | (1) | (since C++17) |
constexpr const T& operator*() const& noexcept; | (2) | (since C++17) |
constexpr T& operator*() & noexcept; | (2) | (since C++17) |
constexpr const T&& operator*() const&& noexcept; | (2) | (since C++17) |
constexpr T&& operator*() && noexcept; | (2) | (since C++17) |
Доступ к содержательному значению.
1) Возвращает указатель на содержательное значение.
2) Возвращает ссылку на содержательное значение.
Поведение не определено, если *this не содержит значения.
Параметры
(нет)
Возвращаемое значение
Указатель или ссылка на содержательное значение.
Примечания
Этот оператор не проверяет, содержит ли optional значение! Вы можете сделать это вручную, используя has_value() или просто operator bool(). В качестве альтернативы, если необходим проверенный доступ, можно использовать value() или value_or().
Пример
#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';
}Вывод:
opt1: 1 opt1: 2 opt2: "abc", size: 3 taken: "abc" opt2: "", size: 0
Отчеты об ошибках
Следующие отчеты об ошибках, изменяющих поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применён к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| LWG 2762 | C++17 |
operator-> и operator* могут быть потенциально-вызывающими исключения | сделано noexcept |
См. также
| возвращает содержащееся значение (публичный член-функция) |
|
| возвращает содержащееся значение, если оно доступно, в противном случае — другое значение (публичный член-функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/optional/operator*