Namespaces
Variants

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

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
仅当 T 为除 cv 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

参见

以原子方式在参数与被引用对象的值之间执行按位与操作,并获取先前持有的值
(公开成员函数)
以原子方式在参数与被引用对象的值之间执行按位或操作,并获取先前持有的值
(公开成员函数)
以原子方式在参数与被引用对象的值之间执行按位异或操作,并获取先前持有的值
(公开成员函数)
以原子方式将被引用对象递增或递减一
(公开成员函数)
以原子方式对被引用值进行加法或减法运算
(公开成员函数)