C++的原子变量初始化时直接赋值报错
•C++
616
0
Linux平台下,如下代码
// main.cpp
#include <atomic>
#include <iostream>
int main() {
std::atomic_int value = 10;
std::cout << value << std::endl;
return 0;
}
std::atomic_int value = 10
使用C++11和C++14标准无法编译通过,C++17可以。
g++ -o out main.cpp --std=c++11
g++ -o out main.cpp --std=c++14
报错信息如下。
main.cpp:5:25: error: use of deleted function ‘std::atomic<int>::atomic(const std::atomic<int>&)’
5 | std::atomic_int value = 10;
| ^~
根据C++11
语言规范,std::atomic
的拷贝构造函数默认使用=delete
标记为禁止编译器自动生成。Linux下的g++
编译器遵循这个规范,Windows下的VC++
编译器则没有遵循。
atomic& operator=(const automic&) = delete;
可以使用如下方式
std::atomic_int value;
value = 10;
C++17
貌似解除了这个限制。