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
Fourni uniquement lorsque T est un type arithmétique autre que cv bool ou un type pointeur-vers-objet
value_type operator + = ( difference_type arg ) const noexcept ;
(1) (constexpr depuis C++26)
value_type operator - = ( difference_type arg ) const noexcept ;
(2) (constexpr depuis C++26)

Remplace atomiquement la valeur actuelle référencée par * ptr par le résultat d'un calcul impliquant la valeur précédente et arg . Ces opérations sont des opérations de lecture-modification-écriture.

1) operator + = effectue une addition atomique. Équivalent à return fetch_add ( arg ) + arg ; .
2) operator - = effectue une soustraction atomique. Équivalent à return fetch_sub ( arg ) - arg ; .
  • Pour les types entiers signés, l'arithmétique est définie pour utiliser la représentation en complément à deux. Il n'y a aucun résultat indéfini.
  • Pour les types à virgule flottante, l' environnement de virgule flottante en vigueur peut être différent de celui du thread appelant. L'opération n'a pas besoin de se conformer aux traits correspondants de std::numeric_limits mais est encouragée à le faire. Si le résultat n'est pas une valeur représentable pour son type, le résultat est non spécifié mais l'opération n'a par ailleurs aucun comportement indéfini.
  • Pour les types pointeurs, le résultat peut être une adresse indéfinie, mais l'opération n'a par ailleurs aucun comportement indéfini.

Ces surcharges participent à la résolution de surcharge seulement si std:: is_const_v < T > est false .

Table des matières

Paramètres

arg - l'argument pour l'opération arithmétique

Valeur de retour

La valeur résultante (c'est-à-dire le résultat de l'application de l'opérateur binaire correspondant à la valeur référencée par * ptr immédiatement avant les effets de la fonction membre correspondante).

Notes

Contrairement à la plupart des opérateurs d'affectation composée, les opérateurs d'affectation composée pour atomic_ref renvoient une copie de la valeur stockée au lieu d'une référence à arg .

Exemple

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 3508
( P3323R1 )
C++20 les opérateurs d'affectation composés n'avaient pas de sens pour const T contraint pour n'accepter que les T non constants

Voir aussi

ajoute atomiquement l'argument à la valeur stockée dans l'objet référencé et obtient la valeur détenue précédemment
(fonction membre publique)
soustrait atomiquement l'argument de la valeur stockée dans l'objet référencé et obtient la valeur détenue précédemment
(fonction membre publique)
incrémente ou décrémente atomiquement l'objet référencé de un
(fonction membre publique)
effectue atomiquement un ET, OU, XOR bit à bit avec la valeur référencée
(fonction membre publique)