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
Nur Mitglied von atomic< Integral  > Spezialisierungen
und atomic< Floating  > Spezialisierungen (seit C++20)
T operator + = ( T arg ) noexcept ;
(1) (seit C++11)
T operator + = ( T arg ) volatile noexcept ;
(2) (seit C++11)
T operator - = ( T arg ) noexcept ;
(3) (seit C++11)
T operator - = ( T arg ) volatile noexcept ;
(4) (seit C++11)
Nur Mitglied von atomic<T*> Partialspezialisierung
T * operator + = ( std:: ptrdiff_t arg ) noexcept ;
(5) (seit C++11)
T * operator + = ( std:: ptrdiff_t arg ) volatile noexcept ;
(6) (seit C++11)
T * operator - = ( std:: ptrdiff_t arg ) noexcept ;
(7) (seit C++11)
T * operator - = ( std:: ptrdiff_t arg ) volatile noexcept ;
(8) (seit C++11)

Ersetzt atomar den aktuellen Wert mit dem Ergebnis einer Berechnung unter Einbeziehung des vorherigen Wertes und arg . Der Vorgang ist ein Lese-Modifizier-Schreibe-Vorgang.

  • operator + = führt atomare Addition durch. Entspricht return fetch_add ( arg ) + arg ; .
  • operator - = führt atomare Subtraktion durch. Entspricht return fetch_sub ( arg ) - arg ; .
1-4) Für vorzeichenbehaftete Ganzzahltypen ist die Arithmetik als Zweierkomplementdarstellung definiert. Es gibt keine undefinierten Ergebnisse.

Für Gleitkommatypen kann die Gleitkommaumgebung , die in Kraft ist, von der Gleitkommaumgebung des aufrufenden Threads abweichen. Die Operation muss nicht den entsprechenden std::numeric_limits -Eigenschaften entsprechen, wird jedoch dazu ermutigt. Wenn das Ergebnis kein darstellbarer Wert für seinen Typ ist, ist das Ergebnis nicht spezifiziert, aber die Operation hat ansonsten kein undefiniertes Verhalten.

(since C++20)
5-8) Das Ergebnis kann eine undefinierte Adresse sein, aber die Operationen haben ansonsten kein undefiniertes Verhalten.
Wenn T kein vollständiger Objekttyp ist, ist das Programm fehlerhaft.


Es ist veraltet, wenn std:: atomic < T > :: is_always_lock_free false ist und irgendeine volatile Überladung an der Überladungsauflösung teilnimmt.

(since C++20)

Inhaltsverzeichnis

Parameter

arg - das Argument für die arithmetische Operation

Rückgabewert

Der resultierende Wert (das heißt, das Ergebnis der Anwendung des entsprechenden binären Operators auf den Wert unmittelbar vor den Effekten der entsprechenden Memberfunktion in der modification order von * this ).

Hinweise

Im Gegensatz zu den meisten zusammengesetzten Zuweisungsoperatoren geben die zusammengesetzten Zuweisungsoperatoren für atomare Typen keine Referenz auf ihre linken Argumente zurück. Stattdessen geben sie eine Kopie des gespeicherten Werts zurück.

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
P0558R1 C++11 Arithmetik erlaubt auf Zeigern zu (möglicherweise cv-qualifiziertem) void oder Funktion als fehlerhaft gemacht

Siehe auch

addiert atomar das Argument zum im atomaren Objekt gespeicherten Wert und erhält den zuvor gehaltenen Wert
(öffentliche Elementfunktion)
subtrahiert atomar das Argument vom im atomaren Objekt gespeicherten Wert und erhält den zuvor gehaltenen Wert
(öffentliche Elementfunktion)
erhöht oder verringert den atomaren Wert um eins
(öffentliche Elementfunktion)
führt bitweises UND, ODER, XOR mit dem atomaren Wert aus
(öffentliche Elementfunktion)