如何在C++中找到并避免未初始化的原始成员?

Art*_*dov 5 c++ gcc static-analysis

未初始化的原始成员有一个常见的C++错误:

#include <iostream>

class A {
  public:    
    int x;
};

int main() {
  A a;
  std::cout << a.x;
  return 0; 
}
Run Code Online (Sandbox Code Playgroud)

a.x将是未初始化的.我明白为什么会发生这种情况,并希望找到解决此类错误的解决方案.我检查了gcc和cppcheck,他们没有报告这些成员.

编辑 用标志检查gcc-Wall -Wextra -Werror -pedantic -Wold-style-cast -Wconversion -Wsign-conversion -Wunreachable-code

检测到错误的第一个版本的gcc是5.1.g ++ - 4.9没有检测到它,clang ++ - 3.6也失败了.

Lig*_*ica 6

是的他们确实 ......有点:

main.cpp: In function 'int main()':
main.cpp:10:18: warning: 'a.A::x' is used uninitialized in this function [-Wuninitialized]
   std::cout << a.x;
                  ^
0
Run Code Online (Sandbox Code Playgroud)

在上面的链接示例中,我正在使用GCC 5.1 trunk -Wall.

打开更多GCC警告和/或升级.

还经过测试,发现没有警告:

老实说,我不确定你还能做什么.您可以创建一个工具来执行此操作,但之后您将创建一个编译器或静态分析器.:)

所以,我想,只希望知道如何做到这一点的人赶上......