std::atomic_ref<T>::operator+=,-=
来自cppreference.com
< cpp | atomic | atomic ref
仅当 T 为 cvbool 以外的算术类型或指向对象的指针类型时提供 | ||
value_type operator+=( difference_type arg )constnoexcept; | (1) | (C++26 起为 constexpr) |
value_type operator-=( difference_type arg )constnoexcept; | (2) | (C++26 起为 constexpr) |
原子地以涉及先前被 *ptr
引用的值和 arg 的运算的结果替换被引用对象的当前值。这些操作是读修改写操作。
1)operator+= 进行原子加法。等价于 return fetch_add(arg)+ arg;。
2)operator-= 进行原子减法。等价于 return fetch_sub(arg)- arg;。
- 对于有符号整数类型,定义算术为使用补码进行。不会有未定义的结果。
- 对于浮点类型,生效的浮点环境可能异于调用方线程的浮点环境。不需要操作服从对应的 std::numeric_limits 特性,但鼓励这么做。如果结果无法以它的类型表示,那么结果未指定,但操作不会另有未定义行为。
- 对于指针类型,结果可以是未定义的地址,但操作不会另有未定义行为。
- 如果 std::remove_pointer_t<T> 不是完整对象类型,那么程序非良构。
这些重载只有在 std::is_const_v<T> 是 false 时才会参与重载决议。
目录 |
[编辑]参数
arg | - | 算术运算的实参 |
[编辑]返回值
结果值(即对紧接对应的成员函数生效之前的被 *ptr
引用的值应用对应的二元运算符的结果)。
[编辑]注解
与大多数复合赋值运算符不同,atomic_ref
的复合赋值运算符并不返回到 arg 的引用,而是返回存储的值的副本。
[编辑]示例
本节未完成 原因:暂无示例 |
[编辑]缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 3508 (P3323R1) | C++20 | 复合赋值运算符对 const T 无意义 | 受约束以仅接受非 const 的 T |
[编辑]参阅
原子地将实参加到存储于被引用对象的值上,并获得先前保有的值 (公开成员函数) | |
原子地从存储于被引用对象的值中减去实参,并获得先前保有的值 (公开成员函数) | |
原子地将被引用对象增加或减少一 (公开成员函数) | |
原子地和被引用值进行逐位与、或、异或 (公开成员函数) |