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