std::expected<T,E>::expected

来自cppreference.com
< cpp‎ | utility‎ | expected
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(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)
 
 
constexpr expected();
(1) (C++23 起)
constexpr expected( const expected& other );
(2) (C++23 起)
constexpr expected( expected&& other ) noexcept(/* 见下文 */);
(3) (C++23 起)
template< class U, class G >
constexpr explicit(/* 见下文 */) expected( const expected<U, G>& other );
(4) (C++23 起)
template< class U, class G >
constexpr explicit(/* 见下文 */) expected( expected<U, G>&& other );
(5) (C++23 起)
template< class U = T >
constexpr explicit(!std::is_convertible_v<U, T>) expected( U&& v );
(6) (C++23 起)
template< class G >

constexpr explicit(!std::is_convertible_v<const G&, E>)

    expected( const std::unexpected<G>& e );
(7) (C++23 起)
template< class G >

constexpr explicit(!std::is_convertible_v<G, E>)

    expected( std::unexpected<G>&& e );
(8) (C++23 起)
template< class... Args >
constexpr explicit expected( std::in_place_t, Args&&... args );
(9) (C++23 起)
template< class U, class... Args >

constexpr explicit expected( std::in_place_t,

                             std::initializer_list<U> il, Args&&... args );
(10) (C++23 起)
template< class... Args >
constexpr explicit expected( std::unexpect_t, Args&&... args );
(11) (C++23 起)
template< class U, class... Args >

constexpr explicit expected( std::unexpect_t,

                             std::initializer_list<U> il, Args&&... args );
(12) (C++23 起)

构造新的 expected 对象。

1) 默认构造函数。如果 T 不是(可有 cv 限定的)void,那么构造一个对象,它包含值初始化的期待的值。

构造完成后,has_value() 返回 true

2) 复制构造函数。如果 other.has_value()false,那么新对象会包含从 other.error() 直接初始化的不期待的值。否则,如果 T 不是(可有 cv 限定的)void,那么新对象会包含从 *other 直接初始化的期待的值。

构造完成后,has_value() 等于 other.has_value()

3) 移动构造函数。如果 other.has_value()false,那么新对象会包含从 std::move(other.error()) 直接初始化的不期待的值。否则,如果 T 不是(可有 cv 限定的)void,那么新对象会包含从 std::move(*other) 直接初始化的期待的值。

构造完成后,has_value() 等于 other.has_value()

4,5)
  • UFstd::add_lvalue_reference_t<const U>(对于重载(4))和 U(对于重载(5)),且
  • GFconst G&(对于重载(4))和 G(对于重载(5))。

如果 other.has_value()false,那么新对象会包含从 std::forward<GF>(other.error()) 直接初始化的不期待的值。否则,如果 T 不是(可有 cv 限定的)void,那么新对象会包含从 std::forward<UF>(*other) 直接初始化的期待的值。 构造完成后, has_value() 等于 other.has_value()

6) 构造包含期待的值的对象,如同以表达式 std::forward<U>(v) 直接初始化(但不是直接列表初始化)类型是 T 的对象一样初始化所含的值。

构造完成后, has_value() 返回 true

7,8)GFconst G&(对于重载(7))和 G(对于重载(8))。

构造包含不期待的值的对象,包含的值从 std::forward<GF>(e.error()) 直接初始化。 构造完成后,has_value() 返回 false

9) 构造包含期待的值的对象,包含的值从 std::forward<Args>(args)... 直接初始化

构造完成后,has_value() 返回 true

10) 构造包含期待的值的对象,包含的值从 il, std::forward<Args>(args)... 直接初始化

构造完成后,has_value() 返回 true

11) 构造包含不期待的值的对象,包含的值从 std::forward<Args>(args)... 直接初始化

构造完成后,has_value() 返回 false

12) 构造包含不期待的值的对象,包含的值从 il, std::forward<Args>(args)... 直接初始化

构造完成后,has_value() 返回 false

参数

other - 另一个 expected 对象,其所含的值被复制
e - std::unexpected 对象,其所含的值被复制
v - 初始化所含值所用的值
args... - 初始化所含值所用的参数
il - 初始化所含值所用的初始化器列表

异常

1) 抛出任何 T 的构造函数所抛的异常。
2) 抛出任何 TE 的构造函数所抛的异常。
3) 如果 T 是(可有 cv 限定的)void 否则,
4,5) 抛出任何 TE 的构造函数所抛的异常。
6) 抛出任何 T 的构造函数所抛的异常。
7,8) 抛出任何 E 的构造函数所抛的异常。
9,10) 抛出任何 T 的构造函数所抛的异常。
11,12) 抛出任何 E 的构造函数所抛的异常。

示例

参阅

表示为不期待的值
(类模板)
原位构造标签
(类模板)
expected 中不期待的值的原位构造标签
(类) (常量)