std::atomic_ref<T>::operator&=,|=,^=
From cppreference.com
< cpp | atomic | atomic ref
Tがcv bool以外の整数型の場合にのみ提供される |
||
| value_type operator&=( value_type arg ) const noexcept; |
(1) | (C++20以降) |
| value_type operator|=( value_type arg ) const noexcept; |
(2) | (C++20以降) |
| value_type operator^=( value_type arg ) const noexcept; |
(3) | (C++20以降) |
参照されているオブジェクトの現在の値を、前の値とargを含む計算の結果でアトミックに置き換えます。これらの操作は読み取り-変更-書き込み操作です。
- operator&= はアトミックなビット単位 AND を実行します。return fetch_and(arg) & arg; に相当します。
- operator!= はアトミックなビット単位 OR を実行します。return fetch_or(arg) | arg; に相当します。
- operator^= はアトミックなビット単位 XOR を実行します。return fetch_xor(arg) ^ arg; に相当します。
これらのオーバーロードは、false が std::is_const_v<T> の場合にのみオーバーロード解決に参加します。
目次 |
[編集] パラメータ
| arg | - | 算術演算の引数 |
[編集] 戻り値
結果の値(つまり、対応するメンバー関数の効果が発生する直前の値に対応する二項演算子を適用した結果)。
[編集] 注釈
ほとんどの複合代入演算子とは異なり、atomic_ref の複合代入演算子は左辺引数への参照を返しません。代わりに格納されている値のコピーを返します。
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3508 (P3323R1) |
C++20 | 複合代入演算子は const T に対して無意味でした | 非 const T のみを受け入れるように制約されました。 |
[編集] 関連項目
| 引数と参照オブジェクトの値との間でビット単位 AND をアトミックに実行し、以前保持されていた値を取得します。 (public member function) | |
| 引数と参照オブジェクトの値との間でビット単位 OR をアトミックに実行し、以前保持されていた値を取得します。 (public member function) | |
| 引数と参照オブジェクトの値との間でビット単位 XOR をアトミックに実行し、以前保持されていた値を取得します。 (public member function) | |
| 参照されるオブジェクトをアトミックに1だけインクリメントまたはデクリメントする (public member function) | |
| 参照される値にアトミックに加算または減算する (public member function) |