std::experimental::optional<T>::operator=

来自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 图形
 
 
 
optional& operator=( std::experimental::nullopt_t ) noexcept;
(1) (库基础 TS)
optional& operator=( const optional& other );
(2) (库基础 TS)
optional& operator=( optional&& other ) noexcept(/* see below */);
(3) (库基础 TS)
template< class U >
optional& operator=( U&& value );
(4) (库基础 TS)

other 的内容替换 *this 的内容。

1) 如果调用前 *this 含有值,则如同以 val->T::~T() 调用析构函数销毁所含值。此调用后 *this 不含有值。
2,3) 赋值为 other 的状态。
  • 如果 *thisother 都不含有值,则函数没有效果。
  • 如果 *this 含有值但 other 不含值,则通过调用析构函数销毁其所含值。此调用后 *this 不含有值。
  • 如果 other 含有值,则取决于 *this 是否含有值,所含值要么从 *other (2)std::move(*other) (3) 直接初始化,要么从之赋值。注意被移动的 optional 仍然含有值
4) 仅退化的完美转发赋值:取决于调用前 *this 是否含有值,所含值要么从 std::forward<U>(value) 直接初始化,要么从 std::forward<U>(value) 赋值。除非 std::is_same<std::decay_t<U>, T>::valuetrue,否则此函数不参与重载决议。

Parameters

other - 要赋值其所含值的另一 optional 对象
value - 要赋给所含值的值
类型要求
-
为使用重载 (2), T 必须满足可复制赋值 (CopyAssignable) 可复制构造 (CopyConstructible)
-
为使用重载 (3), T 必须满足可移动赋值 (MoveAssignable) 可移动构造 (MoveConstructible)

返回值

*this

异常

2-4) 抛出 T 的构造函数或赋值运算符所抛出的任何异常。如果抛出了异常,则不改变 *this(以及 (2) 情况中 other)的初始化状态,即若对象含有值则它仍然含有值,反之亦然。value 的内容和 *thisother 的所含值取决于异常来源操作(复制构造函数、移动赋值等)的异常安全性保证。
(3) 由如下的 noexcept 声明:
noexcept 说明:  

注解

op = {};op = nullopt; 都可以将 optional 对象 op 变为空 optional

示例

#include <experimental/optional>
#include <iostream>
 
int main()
{
    std::experimental::optional<const char*> s1 = "abc", s2; // 构造函数
    s2 = s1; // 赋值
    s1 = "def"; // 衰退赋值 (U = char[4], T = const char*)
    std::cout << *s2 << ' ' << *s1 << '\n';
}

输出:

abc def

参阅

原位构造所含值
(公开成员函数)