std::atomic<T>:: operator+=,-=
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| Constants | ||||
|
(C++17)
|
||||
| Specialized member functions | ||||
|
Specialized for integral,
floating-point (C++20) and pointer types |
||||
|
atomic::operator+=
atomic::operator-=
|
||||
|
Specialized for integral and
pointer types only |
||||
|
(C++26)
|
||||
|
(C++26)
|
||||
| Specialized for integral types only | ||||
|
仅属于
atomic<
Integral
>
特化
以及
atomic<
Floating
>
特化
(自 C++20 起)
|
||
|
T operator
+
=
(
T arg
)
noexcept
;
|
(1) | (自 C++11 起) |
|
T operator
+
=
(
T arg
)
volatile
noexcept
;
|
(2) | (自 C++11 起) |
|
T operator
-
=
(
T arg
)
noexcept
;
|
(3) | (自 C++11 起) |
|
T operator
-
=
(
T arg
)
volatile
noexcept
;
|
(4) | (自 C++11 起) |
|
仅属于
atomic<T*>
部分特化
|
||
|
T
*
operator
+
=
(
std::
ptrdiff_t
arg
)
noexcept
;
|
(5) | (自 C++11 起) |
|
T
*
operator
+
=
(
std::
ptrdiff_t
arg
)
volatile
noexcept
;
|
(6) | (自 C++11 起) |
|
T
*
operator
-
=
(
std::
ptrdiff_t
arg
)
noexcept
;
|
(7) | (自 C++11 起) |
|
T
*
operator
-
=
(
std::
ptrdiff_t
arg
)
volatile
noexcept
;
|
(8) | (自 C++11 起) |
以原子操作将当前值替换为先前值与 arg 参与计算的结果。该操作属于读-修改-写操作。
- operator + = 执行原子加法操作。等价于 return fetch_add ( arg ) + arg ; 。
- operator - = 执行原子减法操作。等价于 return fetch_sub ( arg ) - arg ; 。
|
对于浮点类型,生效的 浮点环境 可能与调用线程的浮点环境不同。该运算不需要符合对应的 std::numeric_limits 特性,但鼓励符合。如果结果不是其类型的可表示值,则结果未指定,但该运算在其他方面没有未定义行为。 |
(since C++20) |
T
不是完整对象类型,则程序非良构。
|
当 std:: atomic < T > :: is_always_lock_free 为 false 且任何 volatile 重载参与重载决议时,该用法被弃用。 |
(since C++20) |
目录 |
参数
| arg | - | 算术运算的参数 |
返回值
结果值(即对 * this 的 修改顺序 中对应成员函数生效前的值应用相应二元运算符所得的结果)。
注释
与大多数复合赋值运算符不同,原子类型的复合赋值运算符不会返回其左操作数的引用,而是返回存储值的副本。
缺陷报告
下列行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
| DR | 适用范围 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| P0558R1 | C++11 | 允许对(可能带有cv限定符的) void 或函数指针进行算术运算 | 改为非法格式 |
参见
|
以原子方式将参数与原子对象中存储的值相加,并获取先前持有的值
(公开成员函数) |
|
|
以原子方式从原子对象中存储的值减去参数,并获取先前持有的值
(公开成员函数) |
|
|
将原子值递增或递减一
(公开成员函数) |
|
|
对原子值执行按位与、或、异或操作
(公开成员函数) |