Пространства имён
Варианты
Действия

std::expected<T,E>::operator->, std::expected<T,E>::operator*

Материал из cppreference.com
< cpp‎ | utility‎ | expected
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
std::expected
Функции-элементы
Наблюдатели
expected::operator->expected::operator*
Монадические операции
Модификаторы
Функции, не являющиеся элементами
Вспомогательные классы
 
T не является cv void
constexpr const T* operator->() const noexcept;
(1) (начиная с C++23)
constexpr T* operator->() noexcept;
(1) (начиная с C++23)
constexpr const T& operator*() const& noexcept;
(2) (начиная с C++23)
constexpr T& operator*() & noexcept;
(2) (начиная с C++23)
constexpr const T&& operator*() const&& noexcept;
(2) (начиная с C++23)
constexpr T&& operator*() && noexcept;
(2) (начиная с C++23)
T является cv void
constexpr void operator*() const noexcept;
(3) (начиная с C++23)

Обращается к ожидаемому значению, содержащемуся в *this.

1) Возвращает указатель на содержащееся значение.
2) Возвращает ссылку на содержащееся значение.
3) Ничего не возвращает.

Поведение не определено, если this->has_value() равно false.

Содержание

[править] Параметры

(нет)

[править] Возвращаемое значение

Указатель или ссылка на содержащееся значение.

[править] Примечание

Эти операторы не проверяют, содержит ли необязательный параметр значение! Вы можете сделать это вручную, используя has_value() или просто operator bool(). Альтернативно, если необходим проверенный доступ, можно использовать value() или value_or().

[править] Пример

#include <cassert>
#include <expected>
#include <iomanip>
#include <iostream>
#include <string>
 
int main()
{
    using namespace std::string_literals;
 
    std::expected<int, std::string> ex1 = 6;
    assert(*ex1 == 6);
 
    *ex1 = 9;
    assert(*ex1 == 9);
 
    ex1 = std::unexpected("ошибка"s);
    // *ex1 = 13 // Неопределённое поведение, ex1 содержит "неожиданное" значение
    assert(ex1.value_or(42) == 42);
 
    std::expected<std::string, bool> ex2 = "Луна"s;
    std::cout << "ex2: " << std::quoted(*ex2) << ", размер: " << ex2->size() << '\n';
 
    // Вы можете "взять" содержащееся значение, вызвав operator* для rvalue
    // объекта expected
 
    auto taken = *std::move(ex2);
    std::cout << "взятый: " << std::quoted(taken) << "\n"
                 "ex2: " << std::quoted(*ex2) << ", размер: " << ex2->size() << '\n';
}

Возможный вывод:

ex2: "Луна", размер: 8
взятый: "Луна"
ex2: "", размер: 0

[править] Смотрите также

возвращает ожидаемое значение
(public функция-элемент) [править]
возвращает ожидаемое значение, если оно присутствует, иначе другое значение
(public функция-элемент) [править]
проверяет, содержит ли объект ожидаемое значение
(public функция-элемент) [править]
возвращает неожидаемое значение
(public функция-элемент) [править]