std::atomic_ref<T>::operator+=,-=
From cppreference.com
< cpp | atomic | atomic ref
Tがcv bool以外の算術型またはオブジェクトへのポインタ型の場合にのみ提供される |
||
value_type operator+=( difference_type arg ) const noexcept; |
(1) | (C++26 以降 constexpr) |
value_type operator-=( difference_type arg ) const noexcept; |
(2) | (C++26 以降 constexpr) |
アトミックに、*ptr が参照する現在の値を、その以前の値と arg を含む計算結果で置き換えます。これらの操作は読み込み-変更-書き込み操作です。
1) operator+= はアトミック加算を実行します。 return fetch_add(arg) + arg; と同等です。
2) operator-= はアトミック減算を実行します。 return fetch_sub(arg) - arg; と同等です。
- 符号付き整数型の場合、算術演算は2の補数表現を使用するように定義されています。未定義の結果はありません。
- 浮動小数点型の場合、有効な浮動小数点環境は、呼び出しスレッドの浮動小数点環境とは異なる場合があります。この操作は、対応するstd::numeric_limitsの特性に準拠する必要はありませんが、準拠することが推奨されます。結果がその型の表現可能な値でない場合、結果は未指定ですが、操作自体に未定義の動作はありません。
- ポインタ型の場合、結果は未定義のアドレスになる可能性がありますが、操作自体に未定義の動作はありません。
- std::remove_pointer_t<T>が完全なオブジェクト型でない場合、プログラムは不正形式です。
これらのオーバーロードは、false が std::is_const_v<T> の場合にのみオーバーロード解決に参加します。
目次 |
[編集] パラメータ
| arg | - | 算術演算の引数 |
[編集] 戻り値
結果の値(つまり、対応するメンバ関数の効果の直前に *ptr が参照していた値に、対応する二項演算子を適用した結果)。
[編集] 注釈
ほとんどの複合代入演算子とは異なり、atomic_ref の複合代入演算子は、arg への参照ではなく、格納された値のコピーを返します。
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3508 (P3323R1) |
C++20 | const T に対して複合代入演算子は意味がありませんでした。 | 非 const T のみを受け入れるように制約されました。 |
[編集] 関連項目
| 参照されるオブジェクトに格納されている値に引数をアトミックに加算し、以前保持されていた値を取得する (public member function) | |
| 参照されるオブジェクトに格納されている値から引数をアトミックに減算し、以前保持されていた値を取得する (public member function) | |
| 参照されるオブジェクトをアトミックに1だけインクリメントまたはデクリメントする (public member function) | |
| 参照される値とビット単位AND、OR、XORをアトミックに実行する (public member function) |