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