std::atomic_ref<T>::operator++,++(int),--,--(int)
來自 cppreference.com
< cpp | 原子操作 | 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);。
- 對於有符號整數型別,算術運算定義為使用二的補碼錶示。沒有未定義的結果。
- 對於指向物件型別的指標,結果可能是一個未定義的地址,但操作本身沒有未定義行為。如果 std::remove_pointer_t<T> 不是一個完整的物件型別,則程式格式錯誤。
這些過載只有在 std::is_const_v<T> 為 false 時才參與過載決議。
目錄 |
[編輯] 返回值
1,3) 修改後被引用物件的值。
2,4) 修改前被引用物件的值。
[編輯] 注意
與大多數前置增量和前置減量運算子不同,`atomic_ref` 的前置增量和前置減量運算子不返回對修改後物件的引用。它們返回儲存值的副本。
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 3508 (P3323R1) |
C++20 | 對於 const T,增量和減量運算子是無意義的。 | 限制為只接受非 const T |
[編輯] 參閱
原子地將引數新增到被引用物件中儲存的值,並獲取先前持有的值 (public member function) | |
原子地從被引用物件中儲存的值中減去引數,並獲取先前持有的值 (public member function) | |
原子地對引用值進行加法或減法 (public member function) | |
原子地對引用值執行按位與、或、異或 (public member function) |