Namespaces
Variants

std::optional<T>::or_else

С ru.cppreference.net
 
 
Библиотека утилит
Поддержка языка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функций библиотеки (C++20)
Утилиты программ
Функции с переменным числом аргументов
Поддержка корутин (C++20)
Поддержка контрактов (C++26)
Трёхстороннее сравнение
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Общие утилиты
Операторы отношений (устарело в C++20)
 
 
template< class F >
constexpr optional or_else( F&& f ) const&;
(1) (начиная с C++23)
template< class F >
constexpr optional or_else( F&& f ) &&;
(2) (начиная с C++23)

Возвращает *this, если он содержит значение. В противном случае возвращает результат f.

Программа является некорректной, если std::remove_cvref_t<std::invoke_result_t<F>> не совпадает с std::optional<T>.

1) Эквивалентно return *this ? *this : std::forward<F>(f)();. Эта перегрузка участвует в разрешении перегрузки, только если смоделированы как std::copy_constructible<T>, так и std::invocable<F>.
2) Эквивалентно return *this ? std::move(*this) : std::forward<F>(f)();. Эта перегрузка участвует в разрешении перегрузки, только если смоделированы как std::move_constructible<T>, так и std::invocable<F>.

Параметры

f - функция или Callable объект, возвращающий std:: optional < T >

Возвращаемое значение

* this или результат функции f , как описано выше.

Примечания

Макрос тестирования возможностей Значение Стандарт Функция
__cpp_lib_optional 202110L (C++23) Монадические операции в std::optional

Пример

#include <iostream>
#include <optional>
#include <string>
int main()
{
    using maybe_int = std::optional<int>;
    auto valueless = []
    {
        std::cout << "Valueless: ";
        return maybe_int{0};
    };
    maybe_int x;
    std::cout << x.or_else(valueless).value() << '\n';
    x = 42;
    std::cout << "Has value: ";
    std::cout << x.or_else(valueless).value() << '\n';
    x.reset();
    std::cout << x.or_else(valueless).value() << '\n';
}

Вывод:

Valueless: 0
Has value: 42
Valueless: 0

Смотрите также

возвращает содержащееся значение, если оно доступно, иначе другое значение
(публичная функция-член)
(C++23)
возвращает результат заданной функции для содержащегося значения, если оно существует, или пустой optional в противном случае
(публичная функция-член)
(C++23)
возвращает optional , содержащий преобразованное значение, если оно существует, или пустой optional в противном случае
(публичная функция-член)