std::experimental::optional
来自 cppreference.com
< cpp | experimental
定义在头文件 <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 | - | 要管理初始化状态的值的类型。该类型必须满足 可销毁 的要求。 |
[编辑] 成员类型
成员类型 | 定义 |
value_type
|
T
|
[编辑] 成员函数
构造 optional 对象 (公共成员函数) | |
销毁包含的值(如果有) (公共成员函数) | |
分配内容 (公共成员函数) | |
观察者 | |
访问包含的值 (公共成员函数) | |
检查对象是否包含一个值 (公共成员函数) | |
返回包含的值 (公共成员函数) | |
如果可用,返回包含的值;否则返回另一个值 (公共成员函数) | |
修改器 | |
交换内容 (公共成员函数) | |
在适当位置构造包含的值 (公共成员函数) |
[编辑] 成员对象
成员名称 | 定义 |
val (私有) |
指向包含值的指针(该指针指向同一个对象的某个数据成员),该名称仅供解释 |
[编辑] 非成员函数
比较 optional 对象(函数模板) | |
创建一个 optional 对象(函数模板) | |
专门化 std::swap 算法 (函数) |
[编辑] 辅助类
专门化 std::hash 算法 (类模板特化) | |
(库基础 TS) |
具有未初始化状态的可选类型的指示器 (类) |
(库基础 TS) |
用于可选类型就地构造的消歧标记类型 (类) |
(库基础 TS) |
指示对不包含值的可选类型进行检查访问的异常 (类) |
[编辑] 辅助对象
(库基础 TS) |
类型为 nullopt_t 的对象(函数) |
(库基础 TS) |
类型为 std::experimental::in_place_t 的对象 (函数) |