Nel seguente esempio:gcc -Wshadow è troppo rigido?
class A
{
public:
int len();
void setLen(int len) { len_ = len; } // warning at this line
private:
int len_;
};
gcc con emissione -Wshadow un avvertimento:
main.cpp:4: warning: declaration of `len' shadows a member of `this'
funzione len e intero len sono di tipo diverso. Perché l'avvertimento?
Aggiornamento
vedo che c'è una vasta cocensuse cosa significa "ombra". E dal punto di vista formale il compilatore fa esattamente ciò che significava anche.
Tuttavia, IMHO, la bandiera non è pratica. Per esempio comunemente usato setter/getter idioma:
class A {
void prop(int prop); // setter
int prop() const; // getter
int prop;
};
Sarebbe bello se ci sarà una bandiera di avvertimento che non emetterà avviso nel caso, ma avviserà nel caso in cui "int a" nasconde "int un".
Aggiunta di -Whadow sul mio codice legacy genera tonnellate di avvisi, mentre di tanto in tanto scopro bug causati dal problema di "shadowing".
Non mi dispiace come sarà chiamato "-Wmuch_more_practical_and_interesting_shadow" o "-Wfoooooo".
Quindi, c'è altro flag di avviso gcc che fa ciò che ho descritto?
Aggiornamento 2
Non solo me pensa -Wshadow in qualche modo non utile link text. Io non sono solo :) Controlli meno rigorosi potrebbero essere molto più utili.
Il tuo "linguaggio comunemente usato" non è nemmeno un codice legale. –