Siempre he sido un buen chico al escribir mis clases, anteponiendo todas las variables miembro con m_:C++ Constructor lista de inicialización extrañeza
class Test {
int m_int1;
int m_int2;
public:
Test(int int1, int int2) : m_int1(int1), m_int2(int2) {}
};
int main() {
Test t(10, 20); // Just an example
}
Sin embargo, hace poco se olvidó de hacer eso y terminó escribiendo:
class Test {
int int1;
int int2;
public:
// Very questionable, but of course I meant to assign ::int1 to this->int1!
Test(int int1, int int2) : int1(int1), int2(int2) {}
};
Lo creas o no, el código compilado sin errores/advertencias y las asignaciones se realizaron correctamente! Fue solo cuando estaba haciendo el control final antes de verificar mi código cuando me di cuenta de lo que había hecho.
Mi pregunta es: ¿por qué mi código compila? ¿Se permite algo así en el estándar C++, o es simplemente un caso en el que el compilador es inteligente? En caso de que se lo pregunte, estaba usando Visual Studio 2008
Mangling sus nombres es difícilmente lo que consideraría ser un "buen chico". Como ya sabrá, generalmente no es necesario, y en las raras ocasiones en que lo hace, tenemos el prefijo 'this->'. – jalf
Quizás un idiota, vea http://stackoverflow.com/questions/2227244/what-if-a-constructor-parameter-has-the-same-name-as-a-member-variable-in-c – Abhay
@jalf : Por otro lado, algún tipo de indicador de miembros-var a veces puede hacer que sea más fácil leer el código (utilizo el último _ cuando no se rompe la convención existente). –