最終更新日時: 2026年07月22日 16時08分23秒 (JST)
rotarymars が更新

履歴 編集

function
<thread>

# std::jthread::operator=(C++20)

    jthread& operator=(const jthread&) = delete; // (1) C++20
    jthread& operator=(jthread&& x) noexcept;    // (2) C++20

## 概要

`jthread`オブジェクトの代入。

- (1) : コピー代入。コピー不可
- (2) : ムーブ代入。ムーブ不可

## 効果

- `joinable()`が`true`を返す場合、`request_stop()`と`join()`を呼び出す
- `x`の状態を`*this`に代入し、`x`をデフォルト構築された状態に設定する

## 事後条件

- `x.get_id() == id()`であること
- `get_id()`の呼び出しでは、代入前の`x.get_id()`が返されるようになること
- メンバ変数として保持している`std::stop_source`型オブジェクト`ssource`は、代入前の`x.ssource`の値を持ち、`x.ssource.stop_possible()`は`false`となること

## 戻り値

`*this`を返す。

## 例

    #include <thread>
    #include <cassert>
    #include <utility>

    int main()
    {
      std::jthread jt1([]{ /*...*/ });
      std::jthread jt2;
      assert(jt1.joinable() && !jt2.joinable());

      // jt1からjt2へムーブ代入
      jt2 = std::move(jt1);
      assert(!jt1.joinable() && jt2.joinable());

      jt2.join();
    }

### 出力

## バージョン

### 言語

- C++20

### 処理系

- Clang:
- GCC: 10.2.0 ✅
- Visual C++: ??