std::atomic_ref<T>::operator++,++(int),--,--(int)
来自 cppreference.cn
< cpp | atomic | atomic ref
仅当 T 是整数类型(除了 cv bool)或对象指针类型时提供 |
||
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++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 3508 (P3323R1) |
C++20 | 自增和自减运算符对于 const T 没有意义 | 约束为仅接受非 const T |
[编辑] 参见
原子地将参数加到存储在被引用对象中的值,并获取先前持有的值 (公共成员函数) | |
原子地从存储在被引用对象中的值中减去参数,并获取先前持有的值 (公共成员函数) | |
原子地增加或减少被引用的值 (公共成员函数) | |
原子地执行按位与、或、异或运算与被引用的值 (公共成员函数) |