En el siguiente ejemplo:gcc -Wshadow es demasiado estricto?
class A
{
public:
int len();
void setLen(int len) { len_ = len; } // warning at this line
private:
int len_;
};
gcc con cuestión -Wshadow una advertencia:
main.cpp:4: warning: declaration of `len' shadows a member of `this'
función len y número entero len son de diferente tipo. ¿Por qué la advertencia?
actualización
veo que hay una amplia cocensuse lo que significa "sombra". Y desde el punto de vista formal, el compilador hace exactamente lo mismo.
Sin embargo, en mi humilde opinión, la bandera no es práctica. Por ejemplo comúnmente usado setter/getter idioma:
class A {
void prop(int prop); // setter
int prop() const; // getter
int prop;
};
Sería bueno si habrá una señal de aviso que no va a emitir advertencias en el caso, pero advertirá en caso de que "int a" oculta "int un".
Agregando -Wshadow en mi código heredado emiten toneladas de advertencias, mientras que de vez en cuando Descubro errores causados por el problema de "ocultación".
No me importa cómo se llamará "-Wmuch_more_practical_and_interesting_shadow" o "-Wfoooooo".
Entonces, ¿hay otro bandera de advertencia de gcc que hace lo que describí?
Actualización 2
No sólo yo piensa -Wshadow alguna manera no es útil link text. No estoy solo :) Las comprobaciones menos estrictas podrían ser mucho más útiles.
Su "modismo de uso común" ni siquiera es código legal. –