对未初始化的对象没有警告,构造中的顺序错误

时间:2016-11-28 18:54:54

标签: c++ gcc clang warnings

如果我使用以下代码,我想收到一些警告:

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标志才能使此警告生效?

0 个答案:

没有答案