Если вы используете GCC, вы можете использовать флаг -Weffc++
, который генерирует предупреждения, когда переменная не инициализируется в списке инициализации члена. Это:
class Foo
{
int v;
Foo() {}
};
Приводит к:
$ g++ -c -Weffc++ foo.cpp -o foo.o
foo.cpp: In constructor ‘Foo::Foo()’:
foo.cpp:4: warning: ‘Foo::v’ should be initialized in the member initialization list
Один недостаток в том, что -Weffc++
также предупредит вас, когда переменная имеет правильный конструктор по умолчанию, и, следовательно, инициализация не потребуется. Он также предупредит вас, когда вы инициализируете переменную в конструкторе, но не в списке инициализации члена. И он предупреждает о многих других проблемах стиля C ++, таких как отсутствующие конструкторы копирования, поэтому вам может потребоваться немного очистить код, если вы хотите регулярно использовать -Weffc++
.
Существует также ошибка, из-за которой он всегда выдает предупреждение при использовании анонимных союзов, которые в настоящее время нельзя обойти, кроме отключения предупреждения, что можно сделать с помощью:
#pragma GCC diagnostic ignored "-Weffc++"
В целом, однако, я обнаружил, что -Weffc++
невероятно полезен для выявления множества распространенных ошибок C ++.