Tak więc standard C++ wymaga, aby członkowie klasy zostali zainicjowani w kolejności, w której są zadeklarowani w klasie, a nie w kolejności, w jakiej są wymieniani na liście inicjalizacyjnej każdego konstruktora. Nie oznacza to jednak, że kolejność, w jakiej oceniane są argumenty tych inicjacji. Pracuję z systemem, który często przekazuje odniesienia do obiektów serializacyjnych i zastanawiam się, czy mogę zagwarantować, że bity będą odczytywane z niego we właściwej kolejności, niezależnie od kolejności, w jakiej te bity zostaną zapisane w polach obiektu.Lista inicjalizatorów * argument * zamówienie oceny
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, zmiany porządku rzeczy, jak ints
i doubles
w deklaracji nie jest zbyt wielkie rzeczy, ale większe przedmioty i rzeczy wymagające dynamicznej alokacji czasami może być.
Po raz pierwszy spudłowałem, że zamówienia są inne, hehe :) –