c++0x中的原子变量可以全局初始化吗?
例如
atomic_int turnX = 5;
int main(){
....
}
失败了 错误:删除了函数‘std::atomic::atomic(const std::atomic&)’
查看atomic_2.h确实给出了这样的想法:这是不允许的。我关于原子变量只能从函数内部赋值的说法正确吗?
尝试:
atomic_int turnX(5);
这是一个 constexpr 构造函数,因此应将其构造为常量初始化(即在加载时)。
是的。顺便说一句,你的代码从 C++17 开始就可以工作。
std::atomic 不可复制或移动。
在 C++17 之前,复制初始化
std::atomic<int> turnX = 5;
将首先从 5 构造一个临时 std::atomic<int>
,然后从该临时值直接初始化turnX。如果没有移动或复制构造函数,这将失败,因此该行无法编译。然而,std::atomic<int> turnX (5);
或std::atomic<int> turnX {5};
是直接初始化,并且只会使用构造函数的参数5构造turnX。
自 C++17 起,没有临时变量,在任何情况下,turnX 都将直接由以 5 作为参数的构造函数调用来初始化,因此 std::atomic 不可移动不存在问题。