命名空间
变体
操作

std::experimental::optional

来自 cppreference.cn
< cpp‎ | 实验性
 
 
实验性
技术规范
文件系统库 (文件系统 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 - 要管理初始化状态的值的类型。该类型必须满足 可销毁 (Destructible) 的要求。

[编辑] 成员类型

成员类型 定义
value_type T

[编辑] 成员函数

构造 optional 对象
(public member function) [编辑]
如果存在,销毁所包含的值
(public member function) [编辑]
赋值内容
(public member function) [编辑]
观察器
访问所包含的值
(public member function) [编辑]
检查对象是否包含值
(public member function) [编辑]
返回所包含的值
(public member function) [编辑]
如果可用,返回包含的值,否则返回另一个值
(public member function) [编辑]
修改器
交换内容
(public member function) [编辑]
就地构造包含的值
(public member function) [编辑]

[编辑] 成员对象

成员名称 (Member name) 定义
val (private) 指向所含值的指针(指向同一对象的成员数据),此名称仅用于说明。

[编辑] 非成员函数

比较 optional 对象
(function template) [编辑]
创建 optional 对象
(function template) [编辑]
特化 std::swap 算法
(function) [编辑]

[编辑] 辅助类

特化 std::hash 算法
(class template specialization) [编辑]
(库基础 TS)
指示未初始化状态的可选类型
(class) [编辑]
(库基础 TS)
用于就地构造可选类型的消歧标记类型
(class) [编辑]
(库基础 TS)
当检查式访问不包含值的 optional 时抛出的异常
(class) [编辑]

[编辑] 辅助对象

(库基础 TS)
nullopt_t 类型的对象
(function) [编辑]
(库基础 TS)
类型为 std::experimental::in_place_t 的对象
(function) [编辑]