std::atomic_ref<T>::fetch_add
來自 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 值的影響。
- 對於有符號整數型別,算術運算定義為使用二的補碼錶示。沒有未定義的結果。
- 對於浮點型別,生效的 浮點環境 可能與呼叫執行緒的浮點環境不同。該操作不必符合相應的 std::numeric_limits 特性,但鼓勵這樣做。如果結果不是其型別可表示的值,則結果是未指定的,但操作本身沒有未定義行為。
- 對於指標型別,結果可能是未定義地址,但操作否則沒有未定義行為。
- 如果 std::remove_pointer_t<T> 不是完整物件型別,則程式格式錯誤。
此過載僅在 std::is_const_v<T> 為 false 時參與過載決議。
目錄 |
[編輯] 引數
arg | - | 算術加法的另一個引數 |
順序 | - | 要強制執行的記憶體順序約束 |
[編輯] 返回值
該函式生效前,由 *ptr
引用的值。
[編輯] 示例
本節不完整 原因:無示例 |
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 3508 (P3323R1) |
C++20 | fetch_add 對 const T 無意義 |
限制為只接受非 const T |