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->()。
当 Template:t 类型的对象被按语境转换为 bool
时,如果对象含有值则转换返回 true,而如果它不含有值则返回 false。
以下条件下 optional
对象含有值:
- 对象以
T
类型的值初始化。 - 对象从含有值的另一
optional
对象赋值。
以下条件下对象不含有值:
- 对象为默认初始化。
- 对象以 std::experimental::nullopt_t 类型的值或不含有值的
optional
对象初始化。 - 对象以 std::experimental::nullopt_t 类型的值或不含有值的
optional
对象赋值。
模板形参
T | - | 所要管理初始化状态的值的类型。该类型必须满足可析构 (Destructible) 的规定。 |
成员类型
成员类型 | 定义 |
value_type
|
T
|
成员函数
构造 optional 对象 (公开成员函数) | |
销毁所含值,若有 (公开成员函数) | |
赋值内容 (公开成员函数) | |
观察器 | |
访问所含值 (公开成员函数) | |
检查对象是否含有值 (公开成员函数) | |
返回所含值 (公开成员函数) | |
如果有则返回所含值,否则返回另一个值 (公开成员函数) | |
修改器 | |
交换内容 (公开成员函数) | |
原位构造所含值 (公开成员函数) |
成员对象
成员名 | 定义 |
val (private)
|
指向所含值的指针(它指向相同对象的数据成员),其名字仅用于阐释 |
非成员函数
比较 optional 对象 (函数模板) | |
创建一个 optional 对象 (函数模板) | |
特化 std::swap 算法 (函数) |
辅助类
特化 std::hash 算法 (类模板特化) | |
(库基础 TS) |
带未初始化状态的 optional 类型的指示器 (类) |
(库基础 TS) |
用于 optional 类型的就地构造的消歧义标签类型 (类) |
(库基础 TS) |
指示进行了到不含值的 optional 的有检查访问的异常 (类) |
辅助对象
(库基础 TS) |
nullopt_t 类型的对象 (函数) |
(库基础 TS) |
std::experimental::in_place_t 类型的对象 (函数) |