std::experimental::optional
< 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 类型的对象 (函数) |