The initialization order is the same as the declaration order in the class.
If the order in the constructor initialization list is different, then compilers usually give a warning. For example, for a class:
class A { public: A() : b(1), a(b) {} private int a; int b; };
GCC will warn that:
$ g++ -Wall c.cc c.cc:5: error: expected `:' before 'int' c.cc: In constructor 'A::A()': c.cc:6: warning: 'A::b' will be initialized after c.cc:5: warning: 'int A::a' c.cc:3: warning: when initialized here
This is because it can easily lead to errors. In the above example, the value of a will be unspecified.
source share