std::atomic<T>:: operator+=,-=
|
член только для
atomic<
Integral
>
специализаций
и
atomic<
Floating
>
специализаций
(начиная с C++20)
|
||
|
T operator
+
=
(
T arg
)
noexcept
;
|
(1) | (начиная с C++11) |
|
T operator
+
=
(
T arg
)
volatile
noexcept
;
|
(2) | (начиная с C++11) |
|
T operator
-
=
(
T arg
)
noexcept
;
|
(3) | (начиная с C++11) |
|
T operator
-
=
(
T arg
)
volatile
noexcept
;
|
(4) | (начиная с C++11) |
|
член только для
atomic<T*>
частичной специализации
|
||
|
T
*
operator
+
=
(
std::
ptrdiff_t
arg
)
noexcept
;
|
(5) | (начиная с C++11) |
|
T
*
operator
+
=
(
std::
ptrdiff_t
arg
)
volatile
noexcept
;
|
(6) | (начиная с C++11) |
|
T
*
operator
-
=
(
std::
ptrdiff_t
arg
)
noexcept
;
|
(7) | (начиная с C++11) |
|
T
*
operator
-
=
(
std::
ptrdiff_t
arg
)
volatile
noexcept
;
|
(8) | (начиная с C++11) |
Атомарно заменяет текущее значение результатом вычисления с участием предыдущего значения и arg . Операция является операцией чтения-изменения-записи.
- operator + = выполняет атомарное сложение. Эквивалентно return fetch_add ( arg ) + arg ; .
- operator - = выполняет атомарное вычитание. Эквивалентно return fetch_sub ( arg ) - arg ; .
|
Для типов с плавающей точкой, среда выполнения операций с плавающей точкой в действии может отличаться от среды выполнения вызывающего потока. Операция не обязана соответствовать соответствующим std::numeric_limits характеристикам, но рекомендуется это делать. Если результат не является представимым значением для своего типа, результат не определён, но в остальном операция не имеет неопределённого поведения. |
(since C++20) |
T
не является полным типом объекта, программа некорректна.
|
Устарело, если std:: atomic < T > :: is_always_lock_free равно false и любая перегрузка с volatile участвует в разрешении перегрузки. |
(since C++20) |
Содержание |
Параметры
| arg | - | аргумент для арифметической операции |
Возвращаемое значение
Результирующее значение (то есть результат применения соответствующего бинарного оператора к значению, непосредственно предшествующему эффектам соответствующей функции-члена в порядке модификации объекта * this ).
Примечания
В отличие от большинства составных операторов присваивания, составные операторы присваивания для атомарных типов не возвращают ссылку на свои левосторонние аргументы. Вместо этого они возвращают копию сохраненного значения.
Отчёты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| P0558R1 | C++11 | arithmetic permitted on pointers to (possibly cv-qualified) void or function | made ill-formed |
Смотрите также
|
атомически добавляет аргумент к значению, хранящемуся в атомарном объекте, и получает значение, хранившееся ранее
(публичная функция-член) |
|
|
атомически вычитает аргумент из значения, хранящегося в атомарном объекте, и получает значение, хранившееся ранее
(публичная функция-член) |
|
|
увеличивает или уменьшает атомарное значение на единицу
(публичная функция-член) |
|
|
выполняет побитовые операции AND, OR, XOR с атомарным значением
(публичная функция-член) |