几天前,我写了如下内容:
struct A {
std::atomic_bool b = false;
};
使用 VC++2015 编译器在 Visual Studio 2015 Update 3 中编译,没有出现任何错误。
现在我在 Ubuntu 上用 GCC (5.4.0) 重新编译了同样的东西并得到了错误:
使用已删除的函数 'std::atomic::atomic(const std::atomic&)
我在ideone上遇到了同样的错误,设置为 C++14(不确定它使用的是什么编译器版本)。
当然,将代码更改为以下内容可以解决 gcc 的问题:
struct A {
std::atomic_bool b { false };
};
我的问题是:
1. 谁是正确的(符合 C++11),VC++ 还是 GCC?似乎 VC++ 从 bool 调用构造函数,而 GCC 调用复制构造函数(已删除)。
2.为了在类声明中初始化原子的默认值,统一初始化(以上)是正确/首选的方式吗?或者我应该改用 ATOMIC_VAR_INIT 宏(啊!)?
struct A {
std::atomic_bool b = ATOMIC_VAR_INIT(false);
};