Extracción de la lista de inicialización de C ++ Constructor
Siempre he sido un buen chico al escribir mis clases, prefijando todas las variables miembro con m_:
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, recientemente olvidé 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 hice la verificación final antes de registrar mi código cuando me di cuenta de lo que había hecho.
Mi pregunta es: ¿por qué se compiló mi código? ¿Se permite algo así en el estándar C ++, o es simplemente un caso de que el compilador es inteligente? En caso de que te lo estés preguntando, estaba usando Visual Studio 2008