g ++ не предупреждает, когда некоторый член класса не инициализирован - PullRequest
0 голосов
/ 31 октября 2018

У меня есть следующий код, и я надеюсь, что gcc может предупредить либо в строке 6, либо в строке 17, но gcc этого не делает.

zhifandeMacBook-Pro:CppCodeExample zhifan$ cat -n main.cpp
     1  #include <iostream>
     2
     3
     4  class X {
     5  public:
     6      X() {}
     7      int getA() const { return a;}
     8      bool getB() const {return b;}
     9  private:
    10      int a;
    11      bool b;
    12  };
    13
    14
    15  int main(int argc, char *argv[])
    16  {
    17      X x;
    18      std::cout << "hello " << x.getA() << std::endl;
    19      return 0;
    20  }
zhifandeMacBook-Pro:CppCodeExample zhifan$ g++ main.cpp  -Wall -O2 -Wuninitialized 
zhifandeMacBook-Pro:CppCodeExample zhifan$

Могу ли я получить предупреждение, что конструктор класса X не инициализирует члены?

1 Ответ

0 голосов
/ 31 октября 2018

GCC выдает предупреждение, используя опцию -Weffc++ (опция «Effective C ++»). Я пробовал это на всех версиях начиная с 4.1.2.

<source>: In constructor 'X::X()':
<source>:6: warning: 'X::a' should be initialized in the member initialization list
<source>:6: warning: 'X::b' should be initialized in the member initialization list
Compiler returned: 0

Вы можете увидеть живое демо на Godbolt здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...