#include <atomic>
int main()
{
auto a = std::atomic_int(1);
auto b = std::atomic_int(2);
std::swap(a, b); // error
}
错误消息:
错误:没有匹配函数调用'swap(std :: atomic&,std :: atomic&)'
为什么不能交换std::atomic<T>
?
该问题有两个层次。
首先是简单而又简单的技术-std::atomic
不能像其他答案中提到的那样可移动或可分配。
第二是其背后的原理-交换std::atomic
本身并不是原子的。并且由于std::atomic
用于多线程环境中,所以由于可能的误解(由于[C0]有swap
,所以它本身是原子的),因此添加swap
会导致大量错误。
全部-如果您不需要原子std::atomic
,可以使用提到的swap
轻松完成。
[exchange
具有已删除的副本构造函数,并且没有移动构造函数。