std::atomic_ref<T>::operator&=,|=,^=
来自cppreference.com
< cpp | atomic | atomic ref
仅当 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 |
[编辑] 参阅
原子地在实参和被引用对象的值间进行逐位与,并获得先前保有的值 (公开成员函数) | |
原子地在实参和被引用对象的值间进行逐位或,并获得先前保有的值 (公开成员函数) | |
原子地在实参和被引用对象的值间进行逐位异或,并获得先前保有的值 (公开成员函数) | |
原子地将被引用对象增加或减少一 (公开成员函数) | |
原子地和被引用值加、减 (公开成员函数) |