Spec-Zone.ru › C++

std::atomic_ref<T>::operator++,++(int),--,--(int)

Предоставляются только если T является целочисленным типом, отличным от cv bool, или типом указателя на объект
value_type operator++() const noexcept;
(1) (начиная с C++20)
value_type operator++( int ) const noexcept;
(2) (начиная с C++20)
value_type operator--() const noexcept;
(3) (начиная с C++20)
value_type operator--( int ) const noexcept;
(4) (начиная с C++20)

Атомарно увеличивает или уменьшает текущее значение объекта, на который ссылается. Эти операции являются операциями чтения-изменения-записи.

1) Выполняет атомарное предварительное увеличение. Эквивалентно return fetch_add(1) + 1;.
2) Выполняет атомарное постфиксное увеличение. Эквивалентно return fetch_add(1);.
3) Выполняет атомарное предварительное уменьшение. Эквивалентно return fetch_sub(1) - 1;
4) Выполняет атомарное постфиксное уменьшение. Эквивалентно return fetch_sub(1);.
  • Для знаковых целочисленных типов арифметические операции определены с использованием представления в дополнительном коде. Неопределённых результатов нет.
  • Для типов указателей на объекты результатом может быть неопределённый адрес, однако в остальном эти операции не приводят к неопределённому поведению. Программа некорректна, если std::remove_pointer_t<T> не является полным типом объекта.

Эти перегрузки участвуют в разрешении перегрузки, только если std::is_const_v<T> равно false.

Возвращаемое значение

1,3) Значение объекта, на который ссылаются, после изменения.
2,4) Значение объекта, на который ссылаются, до изменения.

Примечания

В отличие от большинства операторов предварительного увеличения и уменьшения, операторы предварительного увеличения и уменьшения для atomic_ref не возвращают ссылку на изменённый объект. Вместо этого они возвращают копию сохранённого значения.

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены ретроспективно к ранее опубликованным стандартам C++.

Отчёт об ошибке Применён к Опубликованное поведение Корректное поведение
LWG 3508
(P3323R1)
C++20 операторы увеличения и уменьшения не имели смысла для constT ограничены применением только к неконстантному T

См. также

fetch_add
атомарно прибавляет аргумент к значению, хранящемуся в объекте, на который ссылаются, и получает предыдущее значение
(открытая функция-член)
fetch_sub
атомарно вычитает аргумент из значения, хранящегося в объекте, на который ссылаются, и получает предыдущее значение
(открытая функция-член)
operator+=operator-=
атомарно прибавляет к значению, на которое ссылаются, или вычитает из него
(открытая функция-член)
operator&=operator|=operator^=
атомарно выполняет побитовые операции И, ИЛИ или исключающее ИЛИ со значением, на которое ссылаются
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/atomic/atomic_ref/operator_arith

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API