std::atomic<T>:: operator+=,-=
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| Constants | ||||
|
(C++17)
|
||||
| Specialized member functions | ||||
|
Specialized for integral,
floating-point (C++20) and pointer types |
||||
|
atomic::operator+=
atomic::operator-=
|
||||
|
Specialized for integral and
pointer types only |
||||
|
(C++26)
|
||||
|
(C++26)
|
||||
| Specialized for integral types only | ||||
atomic<
Integral
>
特殊化のメンバーのみ
および
atomic<
Floating
>
特殊化
(C++20以降)
|
||
|
T operator
+
=
(
T arg
)
noexcept
;
|
(1) | (C++11以降) |
|
T operator
+
=
(
T arg
)
volatile
noexcept
;
|
(2) | (C++11以降) |
|
T operator
-
=
(
T arg
)
noexcept
;
|
(3) | (C++11以降) |
|
T operator
-
=
(
T arg
)
volatile
noexcept
;
|
(4) | (C++11以降) |
atomic<T*>
部分特殊化のメンバーのみ
|
||
|
T
*
operator
+
=
(
std::
ptrdiff_t
arg
)
noexcept
;
|
(5) | (C++11以降) |
|
T
*
operator
+
=
(
std::
ptrdiff_t
arg
)
volatile
noexcept
;
|
(6) | (C++11以降) |
|
T
*
operator
-
=
(
std::
ptrdiff_t
arg
)
noexcept
;
|
(7) | (C++11以降) |
|
T
*
operator
-
=
(
std::
ptrdiff_t
arg
)
volatile
noexcept
;
|
(8) | (C++11以降) |
現在の値を、前の値と arg を含む演算結果で原子的に置き換えます。この操作は読み込み-変更-書き込み操作です。
- operator + = アトミックな加算を実行します。 return fetch_add ( arg ) + arg ; と等価です。
- operator - = アトミックな減算を実行します。 return fetch_sub ( arg ) - arg ; と等価です。
|
浮動小数点型の場合、有効な 浮動小数点環境 は呼び出し元スレッドの浮動小数点環境と異なる場合があります。演算は対応する std::numeric_limits 特性に準拠する必要はありませんが、準拠することが推奨されます。結果がその型で表現可能な値でない場合、結果は未規定ですが、それ以外の場合、演算に未定義動作はありません。 |
(C++20以降) |
T
が完全オブジェクト型でない場合、プログラムは不適格となる。
|
|
(C++20以降) |
目次 |
パラメータ
| arg | - | 算術演算の引数 |
戻り値
結果の値(つまり、対応する二項演算子を、 * this の modification order において、対応するメンバ関数の効果の直前にあった値に適用した結果)。
注記
ほとんどの複合代入演算子とは異なり、アトミック型に対する複合代入演算子は左辺引数への参照を返しません。代わりに格納された値のコピーを返します。
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| P0558R1 | C++11 | (CV修飾された可能性のある) void または関数へのポインタでの算術演算が許可されていた | 不正な形式として扱われるようになった |
関連項目
|
アトミックオブジェクトに格納された値に引数を加算し、以前に保持されていた値を取得する
(公開メンバ関数) |
|
|
アトミックオブジェクトに格納された値から引数を減算し、以前に保持されていた値を取得する
(公開メンバ関数) |
|
|
アトミック値を1増分または1減分する
(公開メンバ関数) |
|
|
アトミック値とのビット単位AND、OR、XORを実行する
(公開メンバ関数) |