Spec-Zone.ru › C++

std::atomic_ref<T>::fetch_add

Предоставляется только если T является арифметическим типом, отличным от cv bool, или типом указателя на объект
value_type fetch_add( difference_type arg,
                      std::memory_order order =
                          std::memory_order_seq_cst ) const noexcept;
(constexpr начиная с C++26)

Атомарно заменяет текущее значение, на которое ссылается *ptr, результатом арифметического сложения этого значения и arg. Эта операция является операцией чтения-модификации-записи. На память влияет значение order.

  • Для знаковых целочисленных типов арифметика определяется с использованием представления в дополнительном коде. Неопределённых результатов нет.
  • Для типов с плавающей точкой действующая среда обработки чисел с плавающей точкой может отличаться от среды обработки чисел с плавающей точкой вызывающего потока. Операция не обязана соответствовать соответствующим характеристикам std::numeric_limits, но рекомендуется это делать. Если результат не представим для данного типа, он не специфицирован, однако в остальном операция не приводит к неопределённому поведению.
  • Для типов указателей результат может быть неопределённым адресом, однако в остальном операция не приводит к неопределённому поведению.
    • Если std::remove_pointer_t<T> не является полным типом объекта, программа некорректна.

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

Параметры

arg - другой аргумент арифметического сложения
order - ограничения на порядок доступа к памяти

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

Значение, на которое ссылается *ptr непосредственно перед выполнением эффектов этой функции.

Пример

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

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

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

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

Spec-Zone.ru

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