今天早些时候,我偶然发现了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