std::atomic_ref<T>::operator++,++(int),--,--(int)
来自 cppreference.cn
< 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) |