今天早些時候,我偶然發現了addition on std::atomic<double> not adding up to non-atomic counterpart,原因是std::atomic<double>
未被初始化(另請參閱What's the default value for a std::atomic?)。但是,引起我注意的是,我的編譯器沒有警告我關於std::atomic<double>
未初始化的事實。試想一下:未初始化std :: atomic的編譯器警告<double>
#include <iostream>
#include <atomic>
int main()
{
std::atomic<double> d;
double e;
std::cout << d << " " << e << std::endl;
}
無論鐺3.8也不GCC 6.2似乎能夠產生預警d
未初始化。請參閱live at coliru:我使用-Wall -pedantic -Wextra
,但在有和沒有-O2
的情況下都沒有發出警告。通常會產生一個關於e
未被初始化的警告。 (有趣的是,當-O2
啓用GCC實際上不產生任何警告。)
我當然不能指望的編譯器警告我這些事情;但這種情況讓我想知道:
- 是否有一個特定的原因,爲什麼這種情況沒有(當前)由有問題的編譯器檢測/報告?
- ...甚至(我會認爲這是不太可能的):在一般情況下,由於某種原因,無法在
std::atomic<T>
的特定情況下檢測/報告缺少的初始化,其中T
沒有默認構造函數? - 或者,也許是隻有另一個命令行開關我缺少這將使編譯器產生警告?
謝謝。我試過'-WeffC++',不幸的是這種情況沒有什麼區別。 – mindriot