# std::optional<T>::and_then

< cpp‎ | utility‎ | optional

template< class F > constexpr auto and_then( F&& f ) &; | (1) | (C++23 起)
template< class F > constexpr auto and_then( F&& f ) const&; | (2) | (C++23 起)
template< class F > constexpr auto and_then( F&& f ) &&; | (3) | (C++23 起)
template< class F > constexpr auto and_then( F&& f ) const&&; | (4) | (C++23 起)

若所含值存在则返回在其上调用 `f` 的结果。否则，返回返回类型的空值。

返回类型（见后述）必须为 std::optional 的特化。否则程序非良构。

1) 等价于
if (*this)

return std::invoke(std::forward<F>(f), this->value());
else

return std::remove_cvref_t<std::invoke_result_t<F, T&>>(); 。
2) 等价于
if (*this)

return std::invoke(std::forward<F>(f), this->value());
else

return std::remove_cvref_t<std::invoke_result_t<F, const T&>>(); 。
3) 等价于
if (*this)

return std::invoke(std::forward<F>(f), std::move(this->value()));
else

return std::remove_cvref_t<std::invoke_result_t<F, T>>(); 。
4) 等价于
if (*this)

return std::invoke(std::forward<F>(f), std::move(this->value()));
else

return std::remove_cvref_t<std::invoke_result_t<F, const T>>(); 。

### 参数

f | - | 适合的函数或可调用 (Callable) 对象，返回 std::optional

### 返回值

`f` 的结果或空的 std::optional ，如上所述。

### 注解

有些语言称此操作为 `flatmap` 。

### 示例

| 本节未完成 原因：暂无示例

### 参阅

value_or | 若所含值可用则返回它，否则返回另一个值 (公开成员函数)
transform (C++23) | 若所含值存在则返回含有变换后的所含值的 `optional` ，否则返回空的 `optional` (公开成员函数)
or_else (C++23) | 若 `optional` 含值则返回其自身，否则返回给定函数的结果 (公开成员函数)