前几天我写了类似如下:为什么Visual C++ 2015允许std :: atomic assignment?
struct A {
std::atomic_bool b = false;
};
在Visual Studio 2015年编译更新3,其VC++编译器2015年,无可厚非弹出。
现在我已经重新编译与海湾合作委员会(5.4.0)同样的事情在Ubuntu和得到了错误:
use of deleted function 'std::atomic::atomic(const std::atomic&)
我上ideone了同样的错误,设置为C++ 14(不知道编译器它使用的版本)。
过程中更改代码下面固定的问题与海湾合作委员会:
struct A {
std::atomic_bool b { false };
};
我的问题是:
1.谁是正确的是(C++ 11兼容)这里,VC++或GCC?看来,VC++调用布尔的构造函数,而GCC调用复制构造函数(删除)。
2.为了在类声明中初始化一个原子的默认值的目的是统一初始化(上)正确的/首选的方式?还是应该使用ATOMIC_VAR_INIT宏(呃!)呢?
struct A {
std::atomic_bool b = ATOMIC_VAR_INIT(false);
};
请参阅http://stackoverflow.com/questions/21708606/why-does-an-in-place-member-initialization-use-a-copy-constructor-in-c11。而对于问题2,不要使用ATOMIC_VAR_INIT,这主要是为了兼容C11。 – interjay