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.

questionAnswers(1)

yourAnswerToTheQuestion