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() noexcept(/*see below*/);
(1) (C++23 起)
constexpr expected( const expected& other );
(2) (C++23 起)
constexpr expected( expected&& other ) noexcept(/*see below*/);
(3) (C++23 起)
template< class U, class G >
constexpr explicit(/*see below*/) expected( const expected<U, G>& other );
(4) (C++23 起)
template< class U, class G >
constexpr explicit(/*see below*/) 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 起)
(T 不是 cv void)
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 起)
constexpr explicit expected( std::in_place_t ) noexcept;
(9) (C++23 起)
(T 是 cv void)
template< class... Args >
constexpr explicit expected( std::in_place_t, Args&&... args );
(10) (C++23 起)
(T 不是 cv void)
template< class U, class... Args >

constexpr explicit expected( std::in_place_t,

                             std::initializer_list<U> il, Args&&... args );
(11) (C++23 起)
(T 不是 cv void)
template< class... Args >
constexpr explicit expected( std::unexpect_t, Args&&... args );
(12) (C++23 起)
template< class U, class... Args >

constexpr explicit expected( std::unexpect_t,

                             std::initializer_list<U> il, Args&&... args );
(13) (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) 构造含有期待的值的对象。构造完成后, has_value() 返回 true 。
10) 构造含有期待的值的对象,所含的值从 std::forward<Args>(args)... 直接初始化

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

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

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

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

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

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

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

参数

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

异常

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

Example

See also

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