Namespaces
Variants

std::experimental:: optional

From cppreference.net
定义于头文件 <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 的对象
(函数)