std::atomic_ref<T>:: operator+=,-=
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
(C++26)
|
||||
|
Operations for arithmetic types
(except
bool
and pointer-to-object)
|
||||
|
atomic_ref::operator+=
atomic_ref::operator-=
|
||||
|
Operations for integral types
(except
bool
and pointer-to-object)
|
||||
|
(C++26)
|
||||
|
(C++26)
|
||||
|
Operations for integral types
(except
bool
)
|
||||
| Constants | ||||
|
Nur bereitgestellt, wenn
T
ein arithmetischer Typ außer
cv
bool
oder ein Zeiger-auf-Objekt-Typ ist
|
||
|
value_type operator
+
=
(
difference_type arg
)
const
noexcept
;
|
(1) | (constexpr seit C++26) |
|
value_type operator
-
=
(
difference_type arg
)
const
noexcept
;
|
(2) | (constexpr seit C++26) |
Ersetzt atomar den aktuellen Wert, auf den
*
ptr
verweist, mit dem Ergebnis einer Berechnung unter Einbeziehung des vorherigen Werts und
arg
. Diese Operationen sind Lese-Modifizieren-Schreiben-Operationen.
- Für vorzeichenbehaftete Ganzzahltypen ist die Arithmetik als Zweierkomplementdarstellung definiert. Es gibt keine undefinierten Ergebnisse.
- Für Gleitkommatypen kann die Gleitkommaumgebung von der des aufrufenden Threads abweichen. Die Operation muss nicht den entsprechenden std::numeric_limits Eigenschaften entsprechen, wird aber dazu ermutigt. Wenn das Ergebnis kein darstellbarer Wert für seinen Typ ist, ist das Ergebnis unspezifiziert, aber die Operation hat ansonsten kein undefiniertes Verhalten.
-
Für Zeigertypen kann das Ergebnis eine undefinierte Adresse sein, aber die Operation hat ansonsten kein undefiniertes Verhalten.
- Wenn std:: remove_pointer_t < T > kein vollständiger Objekttyp ist, ist das Programm fehlerhaft.
Diese Überladungen nehmen an der Überladungsauflösung nur teil, wenn std:: is_const_v < T > false ist.
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, auf den
*
ptr
unmittelbar vor den Effekten der entsprechenden Memberfunktion verweist).
Hinweise
Im Gegensatz zu den meisten zusammengesetzten Zuweisungsoperatoren geben die zusammengesetzten Zuweisungsoperatoren für
atomic_ref
eine Kopie des gespeicherten Werts zurück, anstatt eine Referenz auf
arg
.
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |
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 |
|---|---|---|---|
|
LWG 3508
( P3323R1 ) |
C++20 | zusammengesetzte Zuweisungsoperatoren waren bedeutungslos für const T |
eingeschränkt, um nur non-const
T
zu akzeptieren
|
Siehe auch
|
addiert atomar das Argument zum im referenzierten Objekt gespeicherten Wert und erhält den zuvor gehaltenen Wert
(öffentliche Elementfunktion) |
|
|
subtrahiert atomar das Argument vom im referenzierten Objekt gespeicherten Wert und erhält den zuvor gehaltenen Wert
(öffentliche Elementfunktion) |
|
|
inkrementiert oder dekrementiert atomar das referenzierte Objekt um eins
(öffentliche Elementfunktion) |
|
|
führt atomar bitweise UND-, ODER- und XOR-Operationen mit dem referenzierten Wert durch
(öffentliche Elementfunktion) |