Почему я должен инициализировать переменные-члены в порядке, в котором они объявлены?

Сегодня я писал некоторый код и получил странную ошибку компиляции, которая, кажется, вызвана инициализацией переменных-членов в другом порядке, чем они были объявлены.

Пример:

class Test {
    int a;
    int b;

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

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

Тогда, если я скомпилирую это с-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

Я понимаю что-Wall недвусмысленно просит GCC опередить предупреждения, но я предполагаю, что для всех них есть причина. Итак, как может иметь значение порядок инициализации переменных-членов?

Ответы на вопрос(5)

Ваш ответ на вопрос