Pertanto, lo standard C++ richiede che i membri della classe vengano inizializzati nell'ordine in cui sono dichiarati nella classe, piuttosto che nell'ordine in cui sono menzionati nell'elenco di inizializzazione di qualsiasi costruttore. Tuttavia, questo non implica nulla sull'ordine in cui vengono valutati gli argomenti a tali inizializzazioni. Sto lavorando con un sistema che passa frequentemente i riferimenti agli oggetti di serializzazione e mi chiedo se posso assicurarmi che i bit vengano letti nell'ordine corretto, indipendentemente dall'ordine in cui quei bit vengono scritti nei campi dell'oggetto.Elenco inizializzatore * argomento * ordine di valutazione
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();
}
};
Ovviamente, le cose di riordino come ints
e doubles
nella dichiarazione non è un affare troppo grande, ma gli oggetti più grandi e le cose che richiedono l'allocazione dinamica a volte può essere.
Ho perso per la prima volta che gli ordini sono diversi, hehe :) –