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

Antworten auf die Frage(5)

Ihre Antwort auf die Frage