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

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

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, 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)
 
 
<tbody> </tbody>
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 функция-элемент) [править]