std::atomic_ref<T>::operator++,++(int),--,--(int)
来自cppreference.com
< cpp | atomic | atomic ref
仅当 T 为 cvbool 以外的整数类型或指向对象的指针类型时提供 | ||
value_type operator++() const noexcept; | (1) | (C++20 起) |
value_type operator++( int ) const noexcept; | (2) | (C++20 起) |
value_type operator--() const noexcept; | (3) | (C++20 起) |
value_type operator--( int ) const noexcept; | (4) | (C++20 起) |
原子地自增或自减被引用对象的当前值。这些操作是读修改写操作。
1) 进行原子的前自增。等价于 return fetch_add(1) + 1;。
2) 进行原子的后自增。等价于 return fetch_add(1);。
3) 进行原子的前自减。等价于 return fetch_sub(1) - 1;。
4) 进行原子的后自减。等价于 return fetch_sub(1);。
- 对于有符号整数类型,定义算术为使用补码进行。无未定义结果。
- 对于指向对象指针类型,结果可为未定义地址,但操作不会另有未定义行为。如果 std::remove_pointer_t<T> 不是完整对象类型,那么程序非良构。
这些重载只有在 std::is_const_v<T> 是 false 时才会参与重载决议。
返回值
1,3) 被引用对象在修改后的值。
2,4) 被引用对象在修改前的值。
注解
与大多数前自增和前自减运算符不同,atomic_ref
的前自增和前自减运算符并不返回到被修改对象的引用。它们代之以返回存储的值的副本。
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 3508 (P3323R1) | C++20 | 自增与自减运算符对 const T 无意义 | 受约束以仅接受非 const 的 T |
参阅
原子地将实参加到存储于被引用对象的值上,并获得先前保有的值 (公开成员函数) | |
原子地从存储于被引用对象的值中减去实参,并获得先前保有的值 (公开成员函数) | |
原子地和被引用值加、减 (公开成员函数) | |
原子地和被引用值进行逐位与、或、异或 (公开成员函数) |