命名空间
变体
操作

std::experimental::optional

来自 cppreference.com
 
 
实验性
技术规范
文件系统库 (文件系统 TS)
库基础 (库基础 TS)
库基础 2 (库基础 TS v2)
库基础 3 (库基础 TS v3)
并行扩展 (并行 TS)
并行扩展 2 (并行 TS v2)
并发扩展 (并发 TS)
并发扩展 2 (并发 TS v2)
概念 (概念 TS)
范围 (范围 TS)
反射 (反射 TS)
数学特殊函数 (特殊函数 TR)
实验性非 TS
模式匹配
线性代数
std::execution
契约
2D 图形
 
 
 
定义在头文件 <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 的对象
(函数) [编辑]