Warum sollte ich Mitgliedsvariablen in der Reihenfolge initialisieren, in der sie deklariert wurden?

Ich habe heute Code geschrieben und einen seltsamen Kompilierungsfehler festgestellt, der anscheinend durch das Initialisieren von Member-Variablen in einer anderen Reihenfolge als der angegebenen verursacht wurde.

Beispiel:

class Test {
    int a;
    int b;

public:
    Test() : b(1), a(2) {
    }
};

int main() {
    Test test;
    return 0;
}

Dann kompiliere ich es mit-Werror -Wall:

$ g++ -Werror -Wall test.cpp
test.cpp: In constructor ‘Test::Test()’:
test.cpp:3:9: error: ‘Test::b’ will be initialized after [-Werror=reorder]
test.cpp:2:9: error:   ‘int Test::a’ [-Werror=reorder]
test.cpp:6:5: error:   when initialized here [-Werror=reorder]
cc1plus: all warnings being treated as errors

Ich realisiere es-Wall bittet GCC ausdrücklich, die Warnungen zu übertreiben, aber ich gehe davon aus, dass es für alle einen Grund gibt. Wie könnte die Reihenfolge der Initialisierung von Elementvariablen also von Bedeutung sein?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage