std::atomic_ref<T>::fetch_add
From cppreference.com
< cpp | atomic | atomic ref
Tがcv bool以外の算術型またはオブジェクトへのポインタ型の場合にのみ提供される |
||
value_type fetch_add( difference_type arg, std::memory_order order = |
(C++26 以降 constexpr) | |
*ptrで参照されている現在の値とargの算術加算の結果をアトミックに置き換えます。この操作は読み取り-変更-書き込み操作です。メモリはorderの値に従って影響を受けます。
- 符号付き整数型の場合、算術演算は2の補数表現を使用するように定義されています。未定義の結果はありません。
- 浮動小数点型の場合、有効な浮動小数点環境は、呼び出しスレッドの浮動小数点環境とは異なる場合があります。この操作は、対応するstd::numeric_limitsの特性に準拠する必要はありませんが、準拠することが推奨されます。結果がその型の表現可能な値でない場合、結果は未指定ですが、操作自体に未定義の動作はありません。
- ポインタ型の場合、結果は未定義のアドレスになる可能性がありますが、操作自体に未定義の動作はありません。
- std::remove_pointer_t<T>が完全なオブジェクト型でない場合、プログラムは不正形式です。
このオーバーロードは、falseであるstd::is_const_v<T>場合にのみ、オーバーロード解決に参加します。
目次 |
[編集] パラメータ
| arg | - | 算術加算のもう一方の引数 |
| order | - | 強制するメモリ順序制約 |
[編集] 戻り値
この関数の効果が適用される直前の*ptrで参照されていた値。
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3508 (P3323R1) |
C++20 | fetch_addはconst Tには意味がありませんでした |
非 const T のみを受け入れるように制約されました。 |