Есть ли предупреждение компилятора под gcc и / или vs для обнаружения переменных-членов, инициированных для себя?
gcc имеет -Winit-self, но, похоже, работает только для
int f()
{
int i = i;
return i;
}
и не для
class A {
int m;
public:
A(int) : m(m) { }
int f() {return m;}
};
Редактировать : Возвратите вопрос, все, чего не хватало, было -O1 или выше (Спасибо @honk)
Редактировать2 : На самом деле проблема снова на столе.В упрощенном примере -O1 -Wuninitialized -Winit-self работает, однако, он ловит его не в точке, где вы объявляете m(m)
, а когда вы определяете A(4)
.Это также означает, что компилятор не уловит его, если конструктор находится в своем собственном модуле компиляции (что, я думаю, должно быть довольно часто в сценариях реального мира).