std::atomic_ref<T>::operator++,++(int),--,--(int)
From cppreference.com
< cpp | atomic | atomic ref
Tがcv bool以外の整数型またはオブジェクトへのポインタ型の場合にのみ提供される |
||
| value_type operator++() const noexcept; |
(1) | (C++20以降) |
| value_type operator++( int ) const noexcept; |
(2) | (C++20以降) |
| value_type operator--() const noexcept; |
(3) | (C++20以降) |
| value_type operator--( int ) const noexcept; |
(4) | (C++20以降) |
参照されているオブジェクトの現在の値をアトミックにインクリメントまたはデクリメントします。これらの操作は読み取り-変更-書き込み操作です。
1) アトミックな前置インクリメントを実行します。return fetch_add(1) + 1;に相当します。
2) アトミックな後置インクリメントを実行します。return fetch_add(1);に相当します。
3) アトミックな前置デクリメントを実行します。return fetch_sub(1) - 1;に相当します。
4) アトミックな後置デクリメントを実行します。return fetch_sub(1);に相当します。
- 符号付き整数型の場合、算術演算は2の補数表現を使用するように定義されています。未定義の結果はありません。
- ポインタ型の場合、結果は未定義のアドレスになる可能性がありますが、それ以外の動作には未定義の動作はありません。
std::remove_pointer_t<T>が完全なオブジェクト型でない場合、プログラムは形式エラーとなります。
これらのオーバーロードは、false が std::is_const_v<T> の場合にのみオーバーロード解決に参加します。
目次 |
[編集] 戻り値
1,3) 変更後の参照オブジェクトの値。
2,4) 変更前の参照オブジェクトの値。
[編集] ノート
ほとんどの前置インクリメント演算子および前置デクリメント演算子とは異なり、atomic_refの前置インクリメント演算子および前置デクリメント演算子は、変更されたオブジェクトへの参照を返しません。代わりに格納された値のコピーを返します。
[編集] 欠陥レポート
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3508 (P3323R1) |
C++20 | const Tの場合、インクリメントおよびデクリメント演算子は意味がありませんでした。 |
非 const T のみを受け入れるように制約されました。 |
[編集] 関連項目
| 参照されるオブジェクトに格納されている値に引数をアトミックに加算し、以前保持されていた値を取得する (public member function) | |
| 参照されるオブジェクトに格納されている値から引数をアトミックに減算し、以前保持されていた値を取得する (public member function) | |
| 参照される値にアトミックに加算または減算する (public member function) | |
| 参照される値とビット単位AND、OR、XORをアトミックに実行する (public member function) |