如果我使用以下代码,我想收到一些警告:
class Danger
{
private:
int* buff;
public:
Danger( int& _in): buff(&_in) {}
int LetsCrash() { *buff=42; return 0;}
};
class DangerUser
{
private:
int otherVar;
public:
DangerUser( Danger& d): otherVar( d.LetsCrash()) {}
};
class Example
{
private:
int x;
DangerUser dangerUser;
Danger danger;
public:
Example( ):
dangerUser( danger ),
danger( x)
{}
};
int main()
{
Example ex;
}
代码用
编译g ++ -O0 -Wall -pedantic -Wextra x.cpp
以及
clang ++ -O0 -Wall -pedantic -Wextra x.cpp
没有任何警告,但按预期崩溃。
我在版本gcc (GCC) 6.2.1 20160916 (Red Hat 6.2.1-2)
和6.1.0
中使用gcc。 Clang有版本clang版3.8.0 (tags/RELEASE_380/final)
。
我已经红色Warnings for uninitialized members disappear on the C++11但是这指向一个gcc错误,已经在我使用的版本中修复了。
因为这个bug很容易检测(使用不是在使用时构造的变量),我想知道为什么我使用的编译器都没有检测到这些问题。
备注:仅在-O0
中进行编译才能在现实生活中获得崩溃:-)否则,错误将被优化。
是否可能有额外的-Wxyz
标志才能使此警告生效?