std::atomic_ref<T>::operator+=,-=
來自 cppreference.com
< cpp | atomic | atomic_ref
僅當 T 是除 cv bool 之外的算術型別或物件指標型別時提供 |
||
value_type operator+=( difference_type arg ) const noexcept; |
(1) | (C++26 起為 constexpr) |
value_type operator-=( difference_type arg ) const noexcept; |
(2) | (C++26 起為 constexpr) |
原子地將 *ptr
所引用的當前值替換為前一個值與 arg 參與計算的結果。這些操作是讀-修改-寫操作。
1) operator+= 執行原子加法。等價於 return fetch_add(arg) + arg;。
2) operator-= 執行原子減法。等價於 return fetch_sub(arg) - arg;。
- 對於有符號整數型別,算術運算定義為使用二的補碼錶示。沒有未定義的結果。
- 對於浮點型別,生效的浮點環境可能不同於呼叫執行緒的浮點環境。該操作不必符合對應的 std::numeric_limits 特徵,但鼓勵這樣做。如果結果不是其型別可表示的值,則結果未指定,但操作本身沒有未定義行為。
- 對於指標型別,結果可能是未定義地址,但操作否則沒有未定義行為。
- 若 std::remove_pointer_t<T> 不是完整物件型別,則程式非良構。
這些過載僅當 std::is_const_v<T> 為 false 時才參與過載決議。
目錄 |
[編輯] 引數
arg | - | 算術操作的引數 |
[編輯] 返回值
結果值(即,將對應的二元運算子應用於緊接在對應成員函式效果之前由 *ptr
引用的值的結果)。
[編輯] 注意
與大多數複合賦值運算子不同,`atomic_ref` 的複合賦值運算子返回儲存值的副本,而不是對 arg 的引用。
[編輯] 示例
本節不完整 原因:無示例 |
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 3508 (P3323R1) |
C++20 | 複合賦值運算子對於 const T 是無意義的 | 限制為只接受非 const T |
[編輯] 參閱
原子地將引數新增到被引用物件中儲存的值,並獲取先前持有的值 (public member function) | |
原子地從被引用物件中儲存的值中減去引數,並獲取先前持有的值 (public member function) | |
原子地將引用物件遞增或遞減一 (public member function) | |
原子地對引用值執行按位與、或、異或 (public member function) |