前幾天我寫了類似如下:爲什麼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