Lista inicjalizatorów * argument * kolejność oceny
Tak więc standard C ++ wymaga, aby członkowie klasy byli inicjowani w kolejności, w jakiej są zadeklarowani w klasie, a nie w kolejności, w jakiej są wymienieni na liście inicjalizatorów konstruktora. Nie oznacza to jednak niczego o kolejności, w jakiej oceniane są argumenty tych inicjalizacji. Pracuję z systemem, który często przekazuje odwołania do obiektów serializacji i zastanawiam się, czy mogę zapewnić, że bity są odczytywane z niego we właściwej kolejności, niezależnie od kolejności, w jakiej te bity są zapisywane w polach obiektu.
struct Foo {
int a;
double b;
// I want to be able to do this
Foo(SerObj &s)
: b(s.readDouble()), a(s.readInt())
{ }
// Rather than this
Foo (SerObj &s)
{
b = s.readDouble();
a = s.readInt();
}
};
Oczywiście zmiana kolejności rzeczyints
idoubles
w deklaracji nie jest to zbyt wielka sprawa, ale czasami mogą być większe obiekty i rzeczy wymagające dynamicznej alokacji.