Namespaces
Variants

std::atomic<T>:: operator+=,-=

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
仅属于 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 ;
1-4) 对于有符号整数类型,算术运算定义为使用二进制补码表示。不存在未定义结果。

对于浮点类型,生效的 浮点环境 可能与调用线程的浮点环境不同。该运算不需要符合对应的 std::numeric_limits 特性,但鼓励符合。如果结果不是其类型的可表示值,则结果未指定,但该运算在其他方面没有未定义行为。

(since C++20)
5-8) 结果可能是一个未定义的地址,但除此之外操作没有未定义行为。
如果 T 不是完整对象类型,则程序非良构。


std:: atomic < T > :: is_always_lock_free false 且任何 volatile 重载参与重载决议时,该用法被弃用。

(since C++20)

目录

参数

arg - 算术运算的参数

返回值

结果值(即对 * this 修改顺序 中对应成员函数生效前的值应用相应二元运算符所得的结果)。

注释

与大多数复合赋值运算符不同,原子类型的复合赋值运算符不会返回其左操作数的引用,而是返回存储值的副本。

缺陷报告

下列行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。

DR 适用范围 发布时的行为 正确行为
P0558R1 C++11 允许对(可能带有cv限定符的) void 或函数指针进行算术运算 改为非法格式

参见

以原子方式将参数与原子对象中存储的值相加,并获取先前持有的值
(公开成员函数)
以原子方式从原子对象中存储的值减去参数,并获取先前持有的值
(公开成员函数)
将原子值递增或递减一
(公开成员函数)
对原子值执行按位与、或、异或操作
(公开成员函数)