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