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