std::atomic_ref<T>::operator+=,-=,&=,|=,^=
member only of atomic_ref<Integral> and atomic_ref<Floating> template specializations | ||
T operator+=( T arg ) const noexcept; | (1) | |
member only of atomic_ref<T*> template specialization | ||
T* operator+=( std::ptrdiff_t arg ) const noexcept; | (1) | |
member only of atomic_ref<Integral> and atomic_ref<Floating> template specializations | ||
T operator-=( T arg ) const noexcept; | (1) | |
member only of atomic_ref<T*> template specialization | ||
T* operator-=( std::ptrdiff_t arg ) const noexcept; | (1) | |
member only of atomic_ref<Integral> template specialization | ||
T operator&=( T arg ) const noexcept; | (3) | |
T operator|=( T arg ) const noexcept; | (4) | |
T operator^=( T arg ) const noexcept; | (5) |
Атомарно заменяет текущее значение ссылаемого объекта результатом вычисления, включающего предыдущее значение и arg. Эти операции являются операциями чтения-модификации-записи.
return fetch_add(arg) + arg;.return fetch_sub(arg) - arg;.return fetch_and(arg) & arg;.return fetch_or(arg) | arg;.return fetch_xor(arg) ^ arg;.Для целых типов со знаком арифметика определяется с использованием представления со знаком дополнительный код. Нет неопределённых результатов.
Для типов с плавающей точкой окружение с плавающей точкой, действующее в данный момент, может отличаться от окружения с плавающей точкой вызывающей нити. Операция не обязана соответствовать соответствующим свойствам std::numeric_limits , но рекомендуется это делать. Если результат не является представимым значением для своего типа, результат не определён, но в остальном операция не имеет неопределённого поведения.
Для T* типов результатом может быть неопределённый адрес, но в остальном операции не имеют неопределённого поведения. Программа некорректна, если T не является типом объекта.
Параметры
| arg | - | аргумент для арифметической операции |
Возвращаемое значение
Полученное значение (то есть результат применения соответствующего бинарного оператора к значению непосредственно перед действием соответствующей функции-члена).
Примечания
В отличие от большинства операторов сложного присваивания, операторы сложного присваивания для atomic_ref не возвращают ссылку на свои левые операнды. Вместо этого они возвращают копию хранящегося значения.
См. также
| атомарно увеличивает или уменьшает ссылаемый объект на единицу (публичная функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/atomic/atomic_ref/operator_arith2