Lista de inicializadores * argumento * ordem de avaliação
Portanto, o padrão C ++ requer que os membros da classe sejam inicializados na ordem em que são declarados na classe, e não na ordem em que são mencionados na lista de inicializadores de qualquer construtor. No entanto, isso não implica nada na ordem em que os argumentos para essas inicializações são avaliados. Eu estou trabalhando com um sistema que freqüentemente passa referências a objetos de serialização, e me pergunto se posso garantir que os bits sejam lidos na ordem correta, independente da ordem em que esses bits são gravados nos campos do objeto.
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();
}
};
Obviamente, reordenar coisas comoints
edoubles
na declaração não é um negócio muito grande, mas objetos maiores e coisas que requerem alocação dinâmica às vezes podem ser.