Seltsamkeit der C ++ - Konstruktorinitialisierungsliste
Ich war schon immer ein guter Junge, als ich meine Klassen schrieb und allen Mitgliedsvariablen m_ voranstellte:
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
}
Vor kurzem habe ich das jedoch vergessen und schrieb am Ende:
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) {}
};
Ob Sie es glauben oder nicht, der Code wurde ohne Fehler / Warnungen kompiliert und die Zuweisungen erfolgten korrekt! Erst als ich die letzte Überprüfung vor dem Einchecken meines Codes durchführte, wurde mir klar, was ich getan hatte.
Meine Frage ist: Warum wurde mein Code kompiliert? Ist so etwas im C ++ - Standard erlaubt, oder ist der Compiler nur schlau? Falls Sie sich wunderten, verwendete ich Visual Studio 2008