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
miembro exclusivo de atomic< Integral  > especializaciones
y atomic< Floating  > especializaciones (desde C++20)
T operator + = ( T arg ) noexcept ;
(1) (desde C++11)
T operator + = ( T arg ) volatile noexcept ;
(2) (desde C++11)
T operator - = ( T arg ) noexcept ;
(3) (desde C++11)
T operator - = ( T arg ) volatile noexcept ;
(4) (desde C++11)
miembro exclusivo de atomic<T*> especialización parcial
T * operator + = ( std:: ptrdiff_t arg ) noexcept ;
(5) (desde C++11)
T * operator + = ( std:: ptrdiff_t arg ) volatile noexcept ;
(6) (desde C++11)
T * operator - = ( std:: ptrdiff_t arg ) noexcept ;
(7) (desde C++11)
T * operator - = ( std:: ptrdiff_t arg ) volatile noexcept ;
(8) (desde C++11)

Reemplaza atómicamente el valor actual con el resultado del cálculo que involucra el valor anterior y arg . La operación es una operación de lectura-modificación-escritura.

  • operator + = realiza una suma atómica. Equivalente a return fetch_add ( arg ) + arg ; .
  • operator - = realiza una resta atómica. Equivalente a return fetch_sub ( arg ) - arg ; .
1-4) Para tipos enteros con signo, la aritmética se define para usar representación en complemento a dos. No hay resultados indefinidos.

Para tipos de punto flotante, el entorno de punto flotante en efecto puede ser diferente del entorno de punto flotante del hilo llamante. La operación no necesita ajustarse a los rasgos correspondientes de std::numeric_limits pero se recomienda que lo haga. Si el resultado no es un valor representable para su tipo, el resultado no está especificado pero la operación por lo demás no tiene comportamiento indefinido.

(since C++20)
5-8) El resultado puede ser una dirección indefinida, pero las operaciones por lo demás no tienen comportamiento indefinido.
Si T no es un tipo de objeto completo, el programa está mal formado.


Está obsoleto si std:: atomic < T > :: is_always_lock_free es false y cualquier sobrecarga volatile participa en la resolución de sobrecarga.

(since C++20)

Contenidos

Parámetros

arg - el argumento para la operación aritmética

Valor de retorno

El valor resultante (es decir, el resultado de aplicar el operador binario correspondiente al valor inmediatamente anterior a los efectos de la función miembro correspondiente en el orden de modificación de * this ).

Notas

A diferencia de la mayoría de los operadores de asignación compuesta, los operadores de asignación compuesta para tipos atómicos no devuelven una referencia a sus argumentos del lado izquierdo. En su lugar, devuelven una copia del valor almacenado.

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
P0558R1 C++11 aritmética permitida en punteros a void (posiblemente calificado) o función hecho incorrecto

Véase también

agrega atómicamente el argumento al valor almacenado en el objeto atómico y obtiene el valor mantenido previamente
(función miembro pública)
resta atómicamente el argumento del valor almacenado en el objeto atómico y obtiene el valor mantenido previamente
(función miembro pública)
incrementa o decrementa el valor atómico en uno
(función miembro pública)
realiza operaciones AND, OR, XOR a nivel de bits con el valor atómico
(función miembro pública)