std::optional<T>::operator->, std::optional<T>::operator*
Материал из cppreference.com
<tbody>
</tbody>
constexpr const T* operator->() const noexcept; |
(1) | (начиная с C++17) |
constexpr T* operator->() noexcept; |
(1) | (начиная с C++17) |
constexpr const T& operator*() const& noexcept; |
(2) | (начиная с C++17) |
constexpr T& operator*() & noexcept; |
(2) | (начиная с C++17) |
constexpr const T&& operator*() const&& noexcept; |
(2) | (начиная с C++17) |
constexpr T&& operator*() && noexcept; |
(2) | (начиная с C++17) |
Доступ к содержащемуся значению.
1) Возвращает указатель на содержащееся значение.
2) Возвращает ссылку на содержащееся значение.
Поведение не определено, если *this не содержит значения.
Параметры
(нет)
Возвращаемое значение
Указатель или ссылка на содержащееся значение.
Примечание
Этот оператор не проверяет, содержит ли optional значение! Вы можете сделать это вручную, используя has_value() или просто operator bool(). В качестве альтернативы, если требуется проверенный доступ, можно использовать value() или value_or().
Пример
Запустить этот код
#include <optional>
#include <iostream>
#include <iomanip>
#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 = "абв"s;
std::cout<< "opt2: " << std::quoted(*opt2) << " размер: " << opt2->size() << '\n';
// Вы можете "взять" содержащееся значение, вызвав operator*
// для rvalue объекта optional
auto taken = *std::move(opt2);
std::cout << "taken: " << std::quoted(taken) << '\n'
<< "opt2: " << std::quoted(*opt2)
<< ", размер: " << opt2->size() << '\n';
}
Вывод:
opt1: 1
opt1: 2
opt2: абв размер: 3
taken: абв
opt2: "", размер: 0
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 2762 | C++17 | operator-> и operator* могут быть потенциально генерирующими исключения
|
сделаны noexcept |
Смотрите также
| возвращает содержащееся значение (public функция-элемент) | |
| возвращает содержащееся значение, если доступно, иначе другое значение (public функция-элемент) |