void reader(file &f){ static atomic<int> i=0; int w=i++; for (int i=0;i<4;i++){ f.read(w); random_sleepms(0,1000); } }为什么编译时会显示[Error] use of deleted function 'std::atomic<int>::atomic(const std::atomic<int>&)'
时间: 2024-03-06 12:48:24 浏览: 158
白色大气风格的商务团队公司模板下载.zip
这是因为 `std::atomic` 类型的对象是不可复制的,但在你的代码中却尝试复制了一个 `atomic<int>` 类型的对象。在 `static atomic<int> i=0; int w=i++;` 这行代码中,`i++` 实际上会返回一个临时的 `atomic<int>` 类型的对象,然后再将这个对象赋值给 `w` 变量。这个赋值操作会调用 `std::atomic<int>` 的复制构造函数,但是 `std::atomic<int>` 的复制构造函数是被删除的,因此编译器会报错。
要解决这个问题,可以将 `w` 变量的类型改为 `int`,然后使用 `load()` 函数来获取 `i` 的值,如下所示:
```
void reader(file &f){
static atomic<int> i=0;
int w=i.load();
i++;
for (int i=0;i<4;i++){
f.read(w);
random_sleepms(0,1000);
}
}
```
这样就可以避免复制 `atomic<int>` 类型的对象了。
阅读全文