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->()

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