Namespaces
Variants

std::atomic_ref<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
Proporcionado solo cuando T es un tipo aritmético distinto de cv bool o un tipo puntero-a-objeto
value_type operator + = ( difference_type arg ) const noexcept ;
(1) (constexpr desde C++26)
value_type operator - = ( difference_type arg ) const noexcept ;
(2) (constexpr desde C++26)

Reemplaza atómicamente el valor actual referenciado por * ptr con el resultado del cálculo que involucra el valor anterior y arg . Estas operaciones son operaciones de lectura-modificación-escritura.

1) operator + = realiza una suma atómica. Equivalente a return fetch_add ( arg ) + arg ; .
2) operator - = realiza una resta atómica. Equivalente a return fetch_sub ( arg ) - arg ; .
  • Para tipos integrales con signo, la aritmética está definida 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 conformarse con 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.
  • Para tipos puntero, el resultado puede ser una dirección indefinida, pero la operación por lo demás no tiene comportamiento indefinido.

Estas sobrecargas participan en la resolución de sobrecarga solo si std:: is_const_v < T > es false .

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 referenciado por * ptr inmediatamente antes de los efectos de la función miembro correspondiente).

Notas

A diferencia de la mayoría de los operadores de asignación compuesta, los operadores de asignación compuesta para atomic_ref devuelven una copia del valor almacenado en lugar de una referencia a arg .

Ejemplo

Informes de defectos

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

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 3508
( P3323R1 )
C++20 los operadores de asignación compuesta carecían de sentido para const T restringidos para aceptar solo T no constante

Véase también

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