В следующем примере:gcc -Wshadow слишком строг?
class A
{
public:
int len();
void setLen(int len) { len_ = len; } // warning at this line
private:
int len_;
};
GCC с -Wshadow выдает предупреждение:
main.cpp:4: warning: declaration of `len' shadows a member of `this'
функции Len и целого Len имеют различного типа. Почему предупреждение?
Update
Я вижу, есть широкий cocensuse, что "теневые" средства. И с формальной точки зрения компилятор делает именно то, что это значит.
Однако ИМХО, флаг нецелесообразен. Например, обычно используется сеттер/добытчика идиомы:
class A {
void prop(int prop); // setter
int prop() const; // getter
int prop;
};
Было бы хорошо, если будет предупреждение флаг, который не будет выдавать предупреждение в случае, но предупредит в случае «Int А» скрывает «Int а».
Добавление -Wshadow в мой старый код вызывает множество предупреждений, время от времени Я обнаруживаю ошибки, вызванные проблемой «затенения».
Я не против, как это будет называться «-Wmuch_more_practical_and_interesting_shadow» или «-Wfoooooo».
Итак, есть прочее gcc предупреждающий флаг, который делает то, что я описал?
Update 2
Не только мне думает -Wshadow как-то не полезно link text. Я не одинок :) Менее строгие проверки могут быть намного полезнее.
Ваша «обычно используемая идиома» - это даже не юридический код. –