std::atomic_ref<T>::fetch_sub
Предоставляется только, если T является арифметическим типом, отличным от cv bool, или типом указателя на объект | ||
value_type fetch_sub( difference_type arg,
std::memory_order order =
std::memory_order_seq_cst ) const noexcept;
| (constexpr с C++26) |
Атомарно заменяет текущее значение объекта, на который ведёт ссылка, результатом арифметического вычитания значения 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_sub не имело смысла для constT | ограничено приёмом только неконстантных T |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/atomic/atomic_ref/fetch_sub