最終更新日時: 2025年04月03日 13時51分18秒 (JST)
yoh が更新

履歴 編集

function
<atomic>

# std::atomic_ref::store(C++20)

    void
      store(T desired,
            memory_order order = memory_order_seq_cst) const noexcept; // (1) C++20
    constexpr void
      store(value_type desired,
            memory_order order = memory_order_seq_cst) const noexcept; // (1) C++26

## 概要

値を書き込む

## テンプレートパラメータ制約

- C++26 : `is_const_v<T>`が`false`であること

## 事前条件

`order`が以下のメモリオーダーではないこと：

- `memory_order_consume` (C++26で非推奨)
- `memory_order_acquire`
- `memory_order_acq_rel`

## 効果

`order`で指定されたメモリオーダーにしたがって、現在の値を`desired`でアトミックに置き換える。

この関数は、戻り値のない`exchange()`と見なせる。

## 戻り値

なし

## 例外

投げない

## 例

    #include <iostream>
    #include <atomic>
    #include <thread>

    int main()
    {
      int value = 3;
      std::atomic_ref<int> x{value};

      std::thread t{[&x]{
        // アトミックに値を書き込む
        x.store(2);
      }};
      t.join();

      std::cout << value << std::endl;
    }

### 出力

    2

## バージョン

### 言語

- C++20

### 処理系

- Clang: 9.0 ❌
- GCC: 10.1 ✅
- Visual C++: ??

## 参照

- P3323R1 cv-qualified types in `atomic` and `atomic_ref`
  - C++26でCV修飾されたテンプレート引数を受け取れるようになった
- P3309R3 `constexpr atomic` and `atomic_ref`
  - C++26で`constexpr`に対応した
- P3475R2 Defang and deprecate memory_order::consume