So erfordert der C++ - Standard, dass Klassenmitglieder in der Reihenfolge initialisiert werden, in der sie in der Klasse deklariert sind, und nicht in der Reihenfolge, in der sie in der Initialisierungsliste eines Konstruktors aufgeführt sind. Dies impliziert jedoch nichts über die Reihenfolge, in der die Argumente für diese Initialisierungen ausgewertet werden. Ich arbeite mit einem System, das häufig Verweise auf Serialisierungsobjekte übergibt und mich fragt, ob ich sicherstellen kann, dass Bits in der richtigen Reihenfolge gelesen werden, unabhängig davon, in welcher Reihenfolge diese Bits in die Felder des Objekts geschrieben werden.Initialisierungsliste * Argument * Evaluierungsreihenfolge
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();
}
};
Offensichtlich Neuordnungs Dinge wie ints
und doubles
in der Erklärung ist nicht allzu große Sache, aber größere Objekte und Dinge erfordern dynamische Zuordnung kann manchmal sein.
Ich habe zuerst verpasst, dass die Bestellungen anders sind, hehe :) –