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