std::atomic_ref<T>::operator&=,|=,^=

来自cppreference.com
< cpp‎ | atomic‎ | atomic ref
 
 
并发支持库
线程
(C++11)
(C++20)
this_thread 命名空间
(C++11)
(C++11)
(C++11)
协作式取消
互斥
通用锁管理
(C++11)
(C++11)
(C++11)
(C++11)
条件变量
(C++11)
信号量
闩与屏障
(C++20)
(C++20)
未来体
(C++11)
(C++11)
(C++11)
安全回收
风险指针
原子类型
(C++11)
(C++20)
原子类型的初始化
(C++11)(C++20 弃用)
(C++11)(C++20 弃用)
内存定序
(C++11)(C++26 弃用)
原子操作的自由函数
原子标志的自由函数
 
 
仅当 Tcv bool 以外的整数类型时提供
value_type operator&=( value_type arg ) const noexcept;
(1)(C++20 起)
value_type operator|=( value_type arg ) const noexcept;
(2)(C++20 起)
value_type operator^=( value_type arg ) const noexcept;
(3)(C++20 起)

原子地以涉及先前值和 arg 的运算的结果替换被引用对象的当前值。这些操作是读修改写操作。

  • operator&= 进行原子逐位与。等价于 return fetch_and(arg) & arg;
  • operator!= 进行原子逐位或。等价于 return fetch_or(arg) | arg;
  • operator^= 进行原子逐位异或。等价于 return fetch_xor(arg) ^ arg;

这些重载只有在 std::is_const_v<T>false 时才会参与重载决议。

目录

[编辑] 参数

arg-算术运算的实参

[编辑] 返回值

结果值(即对紧接对应的成员函数生效之前的值应用对应的二元运算符的结果)。

[编辑] 注解

不同于大多数复合赋值运算符,atomic_ref 的复合赋值运算符并不返回到其左侧实参的引用。它们代之以返回存储的值的副本。

[编辑] 示例

[编辑] 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告应用于出版时的行为正确行为
LWG 3508
(P3323R1)
C++20复合赋值运算符对 const T 无意义受约束以仅接受非 const 的 T

[编辑] 参阅

原子地在实参和被引用对象的值间进行逐位与,并获得先前保有的值
(公开成员函数) [编辑]
原子地在实参和被引用对象的值间进行逐位或,并获得先前保有的值
(公开成员函数) [编辑]
原子地在实参和被引用对象的值间进行逐位异或,并获得先前保有的值
(公开成员函数) [编辑]
原子地将被引用对象增加或减少一
(公开成员函数) [编辑]
原子地和被引用值加、减
(公开成员函数) [编辑]