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.

questionAnswers(1)

yourAnswerToTheQuestion