几天前我写了以下内容:
使用Visual Studio 2015 Update 3及其VC++2015编译器编译时,没有出现任何问题。
现在我用Ubuntu上的GCC (5.4.0)重新编译同样的东西,却遇到了错误:
struct A {
std::atomic_bool b = false;
};
使用Visual Studio 2015 Update 3及其VC++2015编译器编译时,没有出现任何问题。
现在我用Ubuntu上的GCC (5.4.0)重新编译同样的东西,却遇到了错误:
我在ideone上也遇到了同样的错误,设置为C++14(不确定使用哪个编译器版本)。 当然,将代码更改如下可以解决gcc的问题:use of deleted function 'std::atomic::atomic(const std::atomic&)
struct A {
std::atomic_bool b { false };
};
我的问题是:
1. 在这里,VC++和GCC谁是正确的(C++11兼容)?看起来VC++调用了bool的构造函数,而GCC则调用了复制构造函数(已删除)。
2. 为了在类声明中默认值初始化原子变量,统一初始化(如上所示)是正确/首选的方式吗?还是应该使用ATOMIC_VAR_INIT宏(呃!)?
struct A {
std::atomic_bool b = ATOMIC_VAR_INIT(false);
};