C++ C++;为类中未初始化的变量启用警告

C++ C++;为类中未初始化的变量启用警告,c++,xcode,clang,C++,Xcode,Clang,让我们看看下面的代码: #include <iostream> #include <simd/simd.h> class X { public: X(int a) : x{a} {} // <-- only x is initialized, y is not int x; int y; simd_double3 d; }; int main(int argc, const char * argv[]) { X x(1);

让我们看看下面的代码:

#include <iostream>
#include <simd/simd.h>
class X {
public:
    X(int a) : x{a} {} // <-- only x is initialized, y is not

    int x;
    int y;
    simd_double3 d;
};

int main(int argc, const char * argv[]) {
    X x(1);
    X* xx = new X(2);
    std::cout<<x.x<<" "<<x.y<<" "<<x.d.x; // <-- y and x.d are used, but not initialized
    std::cout<<xx->x<<" "<<xx->y<<"END\n";
    return 0;
}
#包括
#包括
X类{
公众:

X(inta):X{a}{}/我使用clang8(最新版本)命令行检查所有警告:
叮当声-O2-Wall-Wextra-Weverything
检查:
Clang对类和结构中的未初始化变量没有任何警告。但是使用Clang tidy和checkcppcoreguidelines pro type member init可能会对您有所帮助。

gcc发出警告:。禁用优化时,gcc不会显示警告:。添加了优化O1,而测试了O3..没有任何帮助。一切正常。静态分析发现了它,但我希望在正常编译过程中有一个简单的警告。@Galik讨论过,例如,这里:。我想你是对的:正确答案是:clang does没有针对未初始化变量的警告。这太糟糕了,我被这个问题困扰了很多次,我相信我不是一个人。clang tidy是一种很容易被愚弄的检查,并且经常报告误报。更清楚的是,类和结构中没有针对未初始化变量的警告。它确实警告您使用本地未初始化变量。