std::experimental::optional
来自 cppreference.cn
定义于头文件 <experimental/optional> |
||
template< class T > class optional; |
(库基础 TS) | |
类模板 std::experimental::optional
管理一个可选的所含值,即一个可能存在也可能不存在的值。
optional
的常见用例是可能失败的函数的返回值。与 std::pair<T,bool> 等其他方法不同,optional
能够很好地处理构造开销大的对象,并且更具可读性,因为它明确表达了意图。
在任何给定时间,任何 optional<T>
实例都要么包含一个值,要么不包含值。
如果一个 optional<T>
包含一个值,则该值保证作为 optional
对象内存空间的一部分进行分配,即不会发生动态内存分配。因此,optional
对象模拟的是一个对象,而不是一个指针,尽管定义了 operator*() 和 operator->()。
当类型为 optional<T> 的对象被上下文转换为 bool 时,如果该对象包含一个值,则转换返回 true;如果它不包含值,则返回 false。
在以下情况下,optional
对象包含一个值
- 对象用类型为
T
的值初始化。 - 对象从另一个包含值的
optional
赋值。
在以下情况下,对象不包含值
- 对象默认初始化。
- 对象用 std::experimental::nullopt_t 的值或一个不包含值的
optional
对象初始化。 - 对象从 std::experimental::nullopt_t 的值或从一个不包含值的
optional
赋值。
目录 |
[编辑] 模板参数
T | - | 要管理初始化状态的值的类型。该类型必须满足 可销毁 (Destructible) 的要求。 |
[编辑] 成员类型
成员类型 | 定义 |
value_type
|
T
|
[编辑] 成员函数
构造 optional 对象 (public member function) | |
如果存在,销毁所包含的值 (public member function) | |
赋值内容 (public member function) | |
观察器 | |
访问所包含的值 (public member function) | |
检查对象是否包含值 (public member function) | |
返回所包含的值 (public member function) | |
如果可用,返回包含的值,否则返回另一个值 (public member function) | |
修改器 | |
交换内容 (public member function) | |
就地构造包含的值 (public member function) |
[编辑] 成员对象
成员名称 (Member name) | 定义 |
val (private) |
指向所含值的指针(指向同一对象的成员数据),此名称仅用于说明。 |
[编辑] 非成员函数
比较 optional 对象(function template) | |
创建 optional 对象(function template) | |
特化 std::swap 算法 (function) |
[编辑] 辅助类
特化 std::hash 算法 (class template specialization) | |
(库基础 TS) |
指示未初始化状态的可选类型 (class) |
(库基础 TS) |
用于就地构造可选类型的消歧标记类型 (class) |
(库基础 TS) |
当检查式访问不包含值的 optional 时抛出的异常 (class) |
[编辑] 辅助对象
(库基础 TS) |
nullopt_t 类型的对象(function) |
(库基础 TS) |
类型为 std::experimental::in_place_t 的对象 (function) |