std::expected<T,E>::swap

来自cppreference.com
< cpp‎ | utility‎ | expected
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)
 
 
constexpr void swap( expected& other ) noexcept(/*见下文*/);
(C++23 起)

other 的内容交换。

  • 如果 T 是(可能带有 cv 限定的)void,则无效果。
  • 否则,等价于 using std::swap; swap(*this, other);
  • 如果 this->has_value()other.has_value() 都为假,等价于
    using std::swap; swap(this->error(), other.error());
  • 如果 this->has_value() 为假而 other.has_value() 为真,调用 other.swap(*this)
  • 如果 this->has_value() 为真而 other.has_value() 为假,
  • 如果 T 是(可能带有 cv 限定的)void,令 unex 为表示意外值的成员,等价于:
std::construct_at(std::addressof(unex), std::move(other.unex));
std::destroy_at(std::addressof(other.unex));
  • 否则,令 val为表示期望值的成员,而 unex 为表示意外值的成员,等价于:
if constexpr (std::is_nothrow_move_constructible_v<E>) {
    E temp(std::move(other.unex));
    std::destroy_at(std::addressof(other.unex));
    try {
        std::construct_at(std::addressof(other.val), std::move(val));
        std::destroy_at(std::addressof(val));
        std::construct_at(std::addressof(unex), std::move(temp));
    } catch(...) {
        std::construct_at(std::addressof(other.unex), std::move(temp));
        throw;
    }
} else {
    T temp(std::move(val));
    std::destroy_at(std::addressof(val));
    try {
        std::construct_at(std::addressof(unex), std::move(other.unex));
        std::destroy_at(std::addressof(other.unex));
        std::construct_at(std::addressof(other.val), std::move(temp));
    } catch(...) {
        std::construct_at(std::addressof(val), std::move(temp));
        throw;
    }
}
  • 在任何情况下,如果没有抛出异常,在交换后 this->has_value() 为假,而 other.has_value() 为真。

此函数仅在以下条件满足时参与重载解析:

参数

other - 要与之交换内容的 optional 对象

返回值

(无)

异常

如果 T 是(可能带有 cv 限定的)void,则 否则,

在抛出异常的情况下,*thisother 的包含值的状态由 swapTE 的移动构造函数的异常安全保证决定,取决于哪个被调用。对于 *thisother,如果对象包含了期望值,它就保留期望值,反之亦然。

示例

参阅

特化 std::swap 算法
(函数)