std::experimental:: optional
|
定义于头文件
<experimental/optional>
|
||
|
template
<
class
T
>
class optional ; |
(库基础技术规范) | |
类模板
std::experimental::optional
管理一个
可选
的包含值,即可能存在也可能不存在的值。
optional
的一个常见用例是可能失败的函数的返回值。与其他方法(例如
std::
pair
<
T,
bool
>
)相比,
optional
能够很好地处理构造成本高昂的对象,并且更具可读性,因为其意图被明确表达。
在任何特定时间点,
optional<T>
的实例要么
包含一个值
,要么
不包含任何值
。
若某个
optional<T>
包含值
,该值保证分配在
optional
对象的内存空间内,即永远不会发生动态内存分配。因此,即使定义了
operator*()
和
operator->()
,
optional
对象模拟的是对象本身而非指针。
当类型为 optional<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
算法
(类模板特化) |
|
|
(library fundamentals TS)
|
表示未初始化状态的可选类型指示符
(类) |
|
(library fundamentals TS)
|
用于可选类型原位构造的消歧标签类型
(类) |
|
(library fundamentals TS)
|
指示对不包含值的 optional 进行受检访问时抛出的异常
(类) |
辅助对象
|
(library fundamentals TS)
|
类型为
nullopt_t
的对象
(函数) |
|
(library fundamentals TS)
|
类型为
std::
experimental
::
in_place_t
的对象
(函数) |